Списка всегда автоматически выбирает первый элемент
поведение 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= "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>
та же проблема здесь. Кто-нибудь нашел "чистое" решение?
Проблема здесь такая же, она вызывает выполнение множества триггеров.
очевидное решение/исправление:
1) Удалите обработчики событий SelectionChanged из XAML
2) Добавьте обработчики в конструктор после того, как InitializeComponents загрузил listbox.