1

問題は、サード パーティ製のコントロールを使用していて、サード パーティ製のコントロールにテーマ ファイルが提供されていることです。以前は、コントロール (GridView) の 1 つで centain 色 (選択されていないフォーカス) を使用しており、それらのファイルで定義されています。しかし、彼らはテーマ ファイルの色を変更しなかったので、すべての色も変更されました。

色を元に戻したいのですが、考えられる解決策が 2 つあります。

  1. テーマ ファイルを編集し、再コンパイルしてプロジェクトに追加します。

  2. テーマ xaml を抽象化し、すべてのコントロールに適用します。

ただし、どちらのソリューションにも問題があるか、サードパーティのコントロール ライブラリをアップグレードする際にやり直しが必要になる可能性があります。

私が変更したいのは、テーマ ファイル内の 2 つの 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