1

问题是我们正在使用第 3 方控件,并且它有一个由他们提供的主题文件。他们曾经在其中一个控件(GridView)中使用中心颜色(未选择焦点),并在他们的文件中定义。但不是他们改变了主题文件中的颜色,所以我们所有的颜色也改变了。

所以我们想恢复颜色,我想到了两个解决方案:

  1. 编辑他们的主题文件,重新编译并放入我们的项目中。

  2. 抽象出主题 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>
4

0 回答 0