我有一个WPF Window
,它基本上有一个ListBox
,它显示项目列表。当列表失去焦点时,WPF SelectedItem颜色消失
然后我有一个ListView
基本上显示ListBox
SelectedItem
的细节。
事情是,当焦点不再在ListBox
上时,突出显示的颜色消失,我看不到哪个主项目被选中了。
你知道我该如何解决这个问题吗?
我有一个WPF Window
,它基本上有一个ListBox
,它显示项目列表。当列表失去焦点时,WPF SelectedItem颜色消失
然后我有一个ListView
基本上显示ListBox
SelectedItem
的细节。
事情是,当焦点不再在ListBox
上时,突出显示的颜色消失,我看不到哪个主项目被选中了。
你知道我该如何解决这个问题吗?
的最快方法是使用一种风格的一个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的稍微复杂(但更容易控制)的方法的捷径。网上有很多例子,所以我不会在这里提到。
<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>
这个问题也可以通过数据绑定来解决。 如果ListView/ListBox SelectedItem绑定到实现INotifyPropertyChanged并且绑定模式为“TwoWay”的ViewModel中的属性,那么当ListView/ListBox再次获得焦点时,数据绑定将自动选择先前选择的项目。
两个答案都以相同的解决方案结束,但我选择了这个答案,因为答案包含在帖子中。 – SRKX