修改主题的资源而不复制控制模板?

时间:2012-12-11 17:52:44

标签: c# silverlight xaml themes upgrade

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

所以我们想要恢复颜色,我认为有两个解决方案:

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

  2. 抽象出主题xaml并应用于我们所有的控件。

  3. 但是,当我们升级第三方控制库时,这两种解决方案都可能存在问题或需要重做。

    因为我想要更改的是主题文件中的两个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>
    

0 个答案:

没有答案
相关问题