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

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

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


person Shimmy Weitzhandler    schedule 09.09.2009    source источник
comment
Я думаю, вы имели в виду, что когда вы перемещаете фокус в список, всегда выбирается 1-й элемент? (выделено... а если нажать вниз, фокус переместится на 2-й элемент?)   -  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.. и сделал первоначальный фокус на самом списке
.. так что он имеет фокус.. но ни один элемент не выбран.. если вы нажмете вниз или вкладку.. 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>
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