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