2016-10-14 2 views
0

Я пытаюсь создать 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, но это также не помогло.

ответ

0

Не уверен, что, когда вы хотите, чтобы очистить выбранный элемент, так что я добавил кнопку с EventHandler:

<Button Width="100" Height="40" Click="Speise_Gedrueckt"></Button> 

Теперь установить SelectedItem в нуль, когда кнопка нажата:

private void Speise_Gedrueckt(object sender, RoutedEventArgs routedEventArgs) 
{ 
     MyListBox.SelectedItem = null; 
} 
+0

Спасибо за ваш ответ. Обработчик «Speise_Gedrueckt» является обработчиком Click каждого элемента ListBox. То, что делает обработчик, проверяет, является ли SelectedItem списка ListBox обработчиком. Если да, то отмените выбор всех. Это должно привести к тому, что вы сможете «отменить выбор» выбранного элемента. Он задает правильные значения, но не очищает визуальное состояние, а это значит, что есть еще граница вокруг предыдущего выделенного элемента. –

+0

Я попытался использовать кнопку вместо прямого StackPanel в качестве ItemTemplate для элементов ListBox сейчас, и это работал. Почему это не очищает границу StackPanel? Это больше фокус, чем выбранная проблема? –

1

Обратите внимание, что элемент Listbox имеет 3 визуальных состояния - выбранные, не выбранные и сфокусированные. Даже если вы отмените выбор элемента Listbox с помощью кода, фокус клавиатуры все равно будет (при условии, что вы выбрали его, щелкнув по нему). Вот почему будет показан какой-то визуальный индикатор.

+0

Да, это фокус визуальный. Вы можете установить фокус на какой-либо другой элемент пользовательского интерфейса, и визуальное изображение фокуса исчезнет. –

Смежные вопросы