问题是我们正在使用第 3 方控件,并且它有一个由他们提供的主题文件。他们曾经在其中一个控件(GridView)中使用中心颜色(未选择焦点),并在他们的文件中定义。但不是他们改变了主题文件中的颜色,所以我们所有的颜色也改变了。
所以我们想恢复颜色,我想到了两个解决方案:
编辑他们的主题文件,重新编译并放入我们的项目中。
抽象出主题 xaml 并应用于我们所有的控件。
但是当我们升级我们的 3rd 方控制库时,这两种解决方案都可能有问题或需要重做。
因为我想要更改的只是主题文件中的两个 SolidColorBrush 资源,有没有什么好的方法可以在运行时或无论如何覆盖颜色?
注意:在 ControlTemplate 的 VisualState 中使用的 SolidColorBrush。
在主题文件中:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
......
>
<telerik:Windows7Theme x:Key="Theme" />
.....
<SolidColorBrush x:Key="ItemBackground_SelectedUnfocused" Color="White" />
<SolidColorBrush x:Key="ItemInnerBorder_SelectedUnfocused" Color="White" />
....
控制模板:
<ControlTemplate x:Key="GridViewRowTemplate" TargetType="grid:GridViewRow">
.......
<VisualStateGroup x:Name="SelectionStates">
.....
<VisualState x:Name="SelectedUnfocused">
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="Background_Over" Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Background_Over"
Storyboard.TargetProperty="BorderBrush">
<DiscreteObjectKeyFrame KeyTime="0:0:0"
Value="{StaticResource ItemOuterBorder_SelectedUnfocused}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundInner_Over"
Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame KeyTime="0:0:0"
Value="{StaticResource ItemBackground_SelectedUnfocused}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundInner_Over"
Storyboard.TargetProperty="BorderBrush">
<DiscreteObjectKeyFrame KeyTime="0:0:0"
Value="{StaticResource ItemInnerBorder_SelectedUnfocused}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>