WPF SelectedItem цвет исчезает, когда список теряет фокус - PullRequest
5 голосов
/ 08 июля 2011

У меня есть WPF Window, который в основном имеет ListBox, который отображает список элементов.

У меня тогда есть ListView, в основном отображающий детали SelectedItem в ListBox.

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

Вы знаете, как я могу решить это? (т.е. убедитесь, что элемент остается выделенным)

Ответы [ 4 ]

7 голосов
/ 08 июля 2011

Самый быстрый способ - использовать стиль в ListBoxItem для переопределения системных цветов по умолчанию:

<Style TargetType="ListBoxItem">
   <Style.Resources>
      <!--SelectedItem with focus-->
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" 
         Color="LightBlue" Opacity=".4"/>
      <!--SelectedItem without focus-->
      <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" 
         Color="LightBlue" Opacity=".4"/>
   </Style.Resources>
</Style>

Это своего рода ярлык к более сложному (но более простому в управлении) методу определенияItemTemplate для элементов списка.Есть много примеров этого онлайн, поэтому я не буду помещать это здесь.

2 голосов
/ 08 июля 2011
0 голосов
/ 12 октября 2015

Эту проблему также можно решить с помощью привязки данных.Если ListView / ListBox SelectedItem привязан к свойству в ViewModel, которое реализует INotifyPropertyChanged , и режим привязки имеет значение «TwoWay», то, когда ListView / ListBox снова получает фокус, привязка данных автоматически выберет ранеевыбранный пункт.

0 голосов
/ 08 июля 2011
<Style>
   <Style.Triggers>
      <DataTrigger Binding="{Binding RelativeSource=
                       {RelativeSource Mode=FindAncestor,
                        AncestorType={x:Type ListBoxItem}},
                        Path=IsSelected}" 
      Value="True">
         <Setter Property="Panel.Background" Value="Red" />
      </DataTrigger>
   </Style.Triggers>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...