【发布时间】:2015-04-25 13:00:43
【问题描述】:
我正在尝试在运行时更改 wpf 列表框的突出显示(选定)颜色和突出显示的文本颜色。我尝试创建一个样式并按如下方式应用它:
Style s = new Style(typeof(ListBox));
s.Resources.Add(SystemColors.HighlightBrushKey, Setting.ListSelectedColor);
s.Resources.Add(SystemColors.HighlightTextBrushKey, Setting.ListSelectedTextColor);
lstGames.Style = s;
但这似乎无济于事。有什么方法可以实现吗?
编辑:
根据建议,我尝试使用 DynamicResources 来实现这一点,但到目前为止这也没有成功。我的代码:
动态资源
<UserControl.Resources>
<Color x:Key="ListTextSelectedColor"/>
<Color x:Key="ListSelectedColor"/>
</UserControl.Resources>
列表框
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden"
Name="lstGames" Margin="20" Grid.Row="2" Grid.Column="2"
SelectionChanged="lstGames_SelectionChanged" Grid.RowSpan="2" Grid.ColumnSpan="2"
Background="{x:Null}" BorderBrush="{x:Null}" SelectionMode="Single"
FontSize="18" FontFamily="OCR A Extended">
<Style TargetType="ListBox">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{DynamicResource ListSelectedColor}"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{DynamicResource ListSelectedColor}"/>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="{DynamicResource ListTextSelectedColor}"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="{DynamicResource ListTextSelectedColor}"/>
</Style.Resources>
</Style>
</ListBox>
在 C# 中应用资源
this.Resources["ListSelectedColor"] = SETING.ListSelectedColor.Color;
this.Resources["ListTextSelectedColor"] = SETTING.ListSelectedTextColor.Color;
【问题讨论】:
-
我认为您正在寻找与 DynamicResource 的 xaml 绑定。有关示例,请参阅此 SO 问题。 stackoverflow.com/q/17502467/1862333
-
@failedprogramming 我曾尝试使用 DynamicResources 来实现这一点,但没有任何成功。我已经用我的尝试更新了我原来的帖子。
-
@failedprogramming 您的回答结合了我的运行状况。我会在我的最终解决方案中为其他人添加答案。