【发布时间】:2016-03-04 19:47:48
【问题描述】:
我对 WPF 相当陌生,但在 .NET (Winforms) 方面经验丰富。我正在尝试操纵列表框的突出显示样式来控制所选项目的聚焦和未聚焦颜色。我发现的每个教程都使用自定义样式为 SystemColors.HighlightBrushKey 和 SystemColors.ControlBrushKey 分配新值。但它不起作用。经过无数小时试图让它工作,我突然想到它可能与操作系统有关。我一直在 Windows 10 系统上尝试它。我在 Windows 7 设置上运行了完全相同的代码,你瞧,它成功了!
显然旧方法在 Windows 10 中不起作用(至少在我看来是这样)。有没有人找到替代方案?归根结底,我只希望列表框即使在没有焦点的情况下也能保持明亮的高光。默认的灰色高亮很难看到,并且在某些用法中似乎不合适。我有一个真实的场景,当焦点从 ListBox 移开时,高光基本上消失了,感觉非常不自然。
下面是我在 Windows 7 上使用但在 Windows 10 上无法使用的 XAML 代码。(顺便说一下,我也尝试将 SystemColors.ControlBrushKey 替换为 SystemColors.InactiveSelectionHighlightBrushKey - 结果相同)。
<Window x:Class="TestApp.TestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TestApp"
mc:Ignorable="d"
Title="TestWindow" Height="300" Width="300" Loaded="Window_Loaded">
<Window.Resources>
<Style x:Key="myListboxStyle">
<Style.Resources>
<!-- Background of selected item when focused -->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />
<!-- Background of selected item when not focused -->
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Green" />
</Style.Resources>
</Style>
</Window.Resources>
<Grid>
<ListBox x:Name="listBox" Style="{StaticResource myListboxStyle}" HorizontalAlignment="Left" Height="100" Margin="22,18,0,0" VerticalAlignment="Top" Width="237">
<ListBoxItem>Test 1</ListBoxItem>
<ListBoxItem>Test 2</ListBoxItem>
<ListBoxItem>Test 3</ListBoxItem>
</ListBox>
<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="50,165,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
</Grid>
</Window>
【问题讨论】:
-
引用“要求您走这条路的控件设计不佳(包括 WPF 库存控件的一部分)。”来自blogs.msdn.microsoft.com/wpf/2010/11/30/systemcolors-reference
标签: wpf xaml listbox windows-10