ListBox винаги автоматично избира първия елемент

Поведението на ListBox е, че първият елемент се избира автоматично, как мога да избегна това??

Забележка: Предпочитам да направя това с чист xaml, ако имате някакви идеи за кода, моля, не се притеснявайте.


person Shimmy Weitzhandler    schedule 09.09.2009    source източник
comment
Мисля, че имахте предвид, че когато преместите фокуса към списъчната кутия, винаги се избира 1-ви елемент? (маркирано..и ако натиснете надолу, вторият елемент получава фокуса?)   -  person Madi D.    schedule 09.09.2009
comment
1) за този, който маркира въпроса ми като дубликат, вие не разбрахте въпроса, аз съм този, който също публикува дубликата. 2) @Madi, Когато списъчната кутия се визуализира, първият й елемент се избира автоматично, искам да деактивирам тази функция.   -  person Shimmy Weitzhandler    schedule 09.09.2009
comment
хм.. можете да използвате FocusManager, за да фокусирате върху определен елемент/елемент..(всичко в xaml)... но не мога да разбера как да го накарам да фокусира върху нищо :D   -  person Madi D.    schedule 09.09.2009


Отговори (9)


Ами пробвах това с помощта на FocusManager.FocusedElement .. и направих първоначалния фокус към
самото списъчно поле.. така че има фокуса..но не е избран елемент.. ако натиснете надолу или раздела ..първият елемент от списъкът ще бъде избран...

<Window
  ...... 
  FocusManager.FocusedElement="{Binding ElementName=listbox2}">
    <ListBox x:Name="listbox2" HorizontalAlignment="Left"
        VerticalAlignment="Bottom" Width="117.333" Height="116" 
        Margin="30.667,0,0,30">
        <ListBoxItem>Jim</ListBoxItem>
        <ListBoxItem>Mark</ListBoxItem>
        <ListBoxItem>Mandy</ListBoxItem>
</ListBox>
person Madi D.    schedule 09.09.2009

Опитвам

IsSynchronizedWithCurrentItem="False"

person Joe    schedule 19.11.2013

премахнете IsSynchronizedWithCurrentItem="True" и го добавете със следващото събитие SelectionChanged, ако е необходимо. Това реши проблема ми

person smeissner    schedule 16.08.2014

Можете да зададете SelectedIndex на -1:

<ListBox ItemsSource="{Binding MyData}" SelectedIndex="-1"/>

Забележка: Искам да направя това с чист xaml, ако имате някакви идеи за кода, моля, не се притеснявайте.

За съжаление не можете да правите всичко в XAML... обикновено можете да избегнете задния код, но все пак трябва да пишете конвертори, разширения за маркиране или прикачени свойства

person Thomas Levesque    schedule 09.09.2009
comment
Търсех отговор точно като твоя. единственият малък проблем е, че не работи. - person Shimmy Weitzhandler; 09.09.2009
comment
Проблемът е, че искам да избегна това, тъй като изборът задейства верига от изпълнения, които се обработват в манипулатора SelecttionChanged. - person Shimmy Weitzhandler; 03.02.2010

Ето една техника, която използвам доста често. Той се основава на горния пример за добавяне на атрибута FocusedElement към вашите Window или UserControl.

Моята сделка е, че не искам НИКОЙ контрол на моя прозорец да има фокус. Решението за мен е да създам фиктивен контрол, който няма потребителски интерфейс и да присвоя фокус на това. Просто така се случи, че Control пасва идеално на сметката:

<UserControl
    x:Class="MyControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FocusManager.FocusedElement="{Binding ElementName=focus_thief}"
    mc:Ignorable="d">
    <Grid>
        <!-- no renderable UI -->
        <Control Name="focus_thief"/>
        <!-- wants focus, but won't get it -->
        <ListBox>
            <ListBoxItem>First Item</ListBoxItem>
        </ListBox>
    </Grid>
</UserControl>
person rmirabelle    schedule 14.02.2017
comment
Много умно решение. Потребителският интерфейс прави нещо, което понякога е желателно, но ако избраният елемент бъде преработен, той все още поддържа досадна черна кутия, когато целият контрол се визуализира повторно. Вашето решение предотвратява това и съществува точно там, където трябва. Избрах да преименувам моята на TakeFocusToAvoidUiSelectingANonSelectedItem - person N_tro_P; 11.04.2019

SelectedIndex ли е собствеността, която търсите? Или може би не разбирам мисълта ти...

person japf    schedule 09.09.2009
comment
разбрахте мисълта ми, но когато задам selectedindex на -1 или алтернативно избрания елемент на x:Null, първият елемент все още е избран - person Shimmy Weitzhandler; 09.09.2009

Същият проблем тук. Някой да е намерил "чисто" решение?
Проблемът тук е същият, кара множество тригери да се изпълняват.

Очевидно решение/поправка:

  1. Премахнете манипулаторите на събития SelectionChanged от XAML
  2. Добавете манипулатори в конструктора, след като InitializeComponents зареди списъка.
person Bodekaer    schedule 05.04.2010
comment
Свързаните въпроси и коментари трябва да бъдат коментари към съществуващия. - person Shimmy Weitzhandler; 07.04.2010

Добавяне на празен елемент.

person Jeremy Stein    schedule 09.09.2009

person    schedule
comment
Не искам режимът на избор да е Единичен. - person Shimmy Weitzhandler; 10.09.2009