WPF 当列表失去焦点时,SelectedItem的颜色消失了

6
我有一个WPF窗口,基本上有一个ListBox,显示一个项目列表。
然后我有一个ListView,基本上显示了ListBox中SelectedItem的详细信息。
问题是,当焦点不再在ListBox上时,高亮颜色消失了,我就看不到哪个主项被选中了。
您知道如何解决这个问题吗?(即确保项目保持高亮显示)
3个回答

8
最快的方法是使用样式来覆盖默认的系统颜色,这适用于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。 在网上有很多这方面的例子,因此我不会在这里放出那些内容。


两个答案最终得出了相同的解决方案,但我选择了这个答案,因为答案已经包含在帖子中。 - SRKX
对我来说,当程序启动时,列表框始终会将第一项着色,有没有办法防止这种情况发生? - wdlax11
我找到了解决方法 - 我将所选索引绑定到视图模型中的一个变量,因此在 VM 构造函数中,我只需将该值设置为 -1。 - wdlax11

0
<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>

0
这个问题也可以通过数据绑定来解决。 如果 ListView/ListBox 的 SelectedItem 绑定到实现了 INotifyPropertyChanged 接口的 ViewModel 中的一个属性,并且绑定模式为 "TwoWay",那么当 ListView/ListBox 再次获得焦点时,数据绑定将自动选择先前选定的项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接