c# - windows 8 列表框选择颜色

标签 c# .net wpf

我在用Win7编写的WPF中设置了列表框的样式 所以我的风格是

<ListBox>
 <ListBox.Resources>
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#3399FF" />
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="#000000" />
     <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="#3399FF" />
     <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="#000000" />
 </ListBox.Resources>
</ListBox>

此代码在聚焦和散焦状态下对列表框项目进行相同的选择。当我在 Windows 8 下运行我的程序时,这种外观不起作用。 我的代码哪里有错误?

最佳答案

ListBoxItem 在 Windows-8 中似乎有

<MultiTrigger>
  <MultiTrigger.Conditions>
    <Condition Property="IsSelected" Value="true"/>
    <Condition Property="Selector.IsSelectionActive" Value="false"/>
  </MultiTrigger.Conditions>
  <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
  <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
</MultiTrigger>

因为它是默认样式中的非事件选择触发器,然后使用 SystemColors.ControlBrushKeySystemColors.ControlTextBrushKey 因此您可能也想在资源中覆盖它们,

也许是这样的:

<ListBox>
 <ListBox.Resources>
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#3399FF" />
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="#000000" />
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#3399FF" />
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="#000000" />
     <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="#3399FF" />
     <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="#000000" />
 </ListBox.Resources>
</ListBox>

或者自己创建一个Style(基于默认模板)并直接在这个新的Style上设置颜色,然后保证适用于任何版本操作系统的,您不必不断回溯并检查默认值是否发生了更改。

关于c# - windows 8 列表框选择颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16013863/

相关文章:

c# - 使用 ASP.net 和 jquery 进行拖放

c# - Thread.abort() 和 Thread.join() 在 C# Windows 应用程序中花费很长时间

c# - Asp.net core 如何在linq语句中使用indexOf

c# - 以非对称方式合并两个 Dictionary<string, string>

wpf - xmlns 无法引用 XAML 中的其他项目

c# - 如何以编程方式禁用 WPF DataGrid 中的特定单元格

c# - 使用 CheckBox 在 ASP.NET GridView 中选择行

c# - 防止在设计时调整高度控件的大小

c# - 使用 MediaElement 播放来自 Stream 的视频

c# - 具有虚拟化的 WPF TreeView - 选择项目并将其置于 View 中