Я пытаюсь создать ListBox, который позволяет пользователю отменить выбор элемента.WPF ListBox.UnselectAll() не очищает визуальное состояние
Это мой XAML код:
<ListBox Name="MyListBox"
ItemsSource="{Binding MoeglicheHauptspeisen}"
SelectionMode="Single">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Width="200"
Height="200"
Background="{StaticResource Braun}"
MouseDown="Speise_Gedrueckt">
<TextBlock Margin="0 50 0 0"
HorizontalAlignment="Center"
Text="{Binding SpeiseTyp}" />
<TextBlock HorizontalAlignment="Center" Text="{Binding Beschreibung}" />
<TextBlock HorizontalAlignment="Center" Text="{Binding Preis, StringFormat={}{0:C}}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
И мой код-за:
private void Speise_Gedrueckt(object sender, MouseButtonEventArgs e)
{
MyListBox.UnselectAll();
}
Я могу отменить этот пункт еще раз нажав на нее, она устанавливается SelectedIndex -1 и т.д. , но он не очищает границу, которую выбранный элемент имеет в самом ListBox.
Я сделал google много, но ничего не нашел, изменил этот факт. Я попытался установить границу/фон элемента, который был выбран через style.setter, но это также не помогло.
Спасибо за ваш ответ. Обработчик «Speise_Gedrueckt» является обработчиком Click каждого элемента ListBox. То, что делает обработчик, проверяет, является ли SelectedItem списка ListBox обработчиком. Если да, то отмените выбор всех. Это должно привести к тому, что вы сможете «отменить выбор» выбранного элемента. Он задает правильные значения, но не очищает визуальное состояние, а это значит, что есть еще граница вокруг предыдущего выделенного элемента. –
Я попытался использовать кнопку вместо прямого StackPanel в качестве ItemTemplate для элементов ListBox сейчас, и это работал. Почему это не очищает границу StackPanel? Это больше фокус, чем выбранная проблема? –