Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Ну, я попробовал это с помощью FocusManager.FocusedElement.. и сделал основной фокус на
listbox сам.. поэтому он имеет фокус.. но ни один элемент не выбран. если вы нажимаете вниз или вкладку. 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>

Ответ 2

Try

IsSynchronizedWithCurrentItem="False"

Ответ 3

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

Ответ 4

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

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

Примечание. Я хочу сделать это с помощью чистого xaml, если у вас есть идеи с кодом, пожалуйста, не беспокойтесь о себе.

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Очевидное решение/исправить:

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

Ответ 9

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