Списка всегда автоматически выбирает первый элемент

поведение ListBox заключается в том, что первый элемент выбирается автоматически, как этого избежать??

примечание: Я предпочитаю делать это с чистым xaml, если у вас есть какие-либо идеи кода, пожалуйста, не беспокойтесь.

9 ответов


Ну, я попробовал это с помощью FocusManager.FocusedElement .. и сделал внутренний фокус на
сам элемент ListBox.. поэтому он имеет фокус..но ни один элемент не выбран.. если u нажмите вниз или tab ..будет выбран 1-й элемент списка...

<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>

попробовать

IsSynchronizedWithCurrentItem="False"


удалить IsSynchronizedWithCurrentItem= "True" и при необходимости добавить его со следующим событием SelectionChanged. Это решило мою проблему


вы можете установить SelectedIndex в -1:

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

примечание: Я хочу сделать это с чистым xaml, если у вас есть какие-либо идеи кода, пожалуйста, не беспокойтесь.

к сожалению, вы не можете делать все в XAML... обычно вы можете избежать кода, но вам все равно нужно писать конвертеры, расширения разметки или прикрепленные свойства


вот техника, которую я использую довольно часто. Она основывается на приведенном выше примере добавления 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>

является ли SelectedIndex собственностью, которую вы ищете ? Или я не понимаю, о чем ты...


<ListBox SelectioMode="Single" SelectedIndex="-1"/>

та же проблема здесь. Кто-нибудь нашел "чистое" решение?
Проблема здесь такая же, она вызывает выполнение множества триггеров.

очевидное решение/исправление:
1) Удалите обработчики событий SelectionChanged из XAML
2) Добавьте обработчики в конструктор после того, как InitializeComponents загрузил listbox.


добавить пустой элемент.