いくつかのリソース ディクショナリを含むユーザー コントロール ライブラリがあります。コード:
<ResourceDictionary ... >
<LinearGradientBrush x:Key="MyButtonBackground" EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF654073" Offset="0.084"/>
<GradientStop Color="#FF8A6093" Offset="0.929"/>
</LinearGradientBrush>
<Style x:Key="MyButtonStyle" TargetType="{x:Type MyButton}" >
<Setter Property="Background" Value="{StaticResource ResourceKey=MyButtonBackground}" />
<Setter Property="Foreground" Value="White" />
</Style>
</ResourceDictionary>
次に、リソース ディクショナリをロードするクラスを作成します。基本的:
return (ResourceDictionary)Application.LoadComponent(new System.Uri("/MyAssembly;component/Themes/Default.xaml", System.UriKind.Relative))
さて、UserControl クラスで、ResourceDictionary を取得した後、Style を直接ロードしたいと思います。どうやってやるの?
this.Style = ((Style)MyResourceDictionary["MyButtonStyle"]); // Don't work
でも:
this.Background = ((Brush)MyResourceDictionary["MyButtonBackground"]); // Works