问题在于我们正在使用第三方控件,它有一个由他们提供的主题文件。 他们曾经在其中一个控件(GridView)中使用了一种颜色(未聚焦选中),并在其文件中定义。 但不是他们改变了主题文件中的颜色,所以我们所有的颜色也都改变了。
所以我们想要恢复颜色,我认为有两个解决方案:
编辑主题文件,重新编译并放入我们的项目中。
抽象出主题xaml并应用于我们所有的控件。
但是,当我们升级第三方控制库时,这两种解决方案都可能存在问题或需要重做。
因为我想要更改的是主题文件中的两个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>