属性を追加することで、コントロールでUserControl
のスタイルをそのように設定できることを知っています。
Style="{StaticResource MyStyle}"
そして、私のResourceDictionary
には、次のようなスタイルがあります。
<Style x:Key="MyStyle" TargetType="{x:Type UserControl}">
<Style.Resources>
<Style TargetType="Label">
<!-- Label Setters -->
</Style>
<Style TargetType="TextBox">
<!-- TextBox Setters -->
</Style>
</Style.Resources>
</Style>
しかし、UserControl
のResourceDictionary
のスタイルを直接次のように設定できる方法はありますか。
<Style x:Key="MyStyle" TargetType="{x:Type MyControl}">
基本的に私の質問は、スタイルをコントロールコンポーネントではなくコントロールに直接適用できるかどうかです。
編集:私が達成しようとしているのは、次のようなものです。
<Style x:Key="MyStyle" TargetType="{x:Type MyControl}">
<Setter Property="Background" Value="Black"/>
</Style>
<Style x:Key="{x:Type MyControl}" TargetType="{x:Type MyControl}" BasedOn="{StaticResource MyStyle}"/>
2行目がアプリケーションのすべてのコントロールにスタイルを適用する場合、通常のコントロールで同様のことを行うと、このアプローチが機能します。
ただし、これはBackground
のUserControl
のみを設定するので、コンポーネントに同じ背景を適用するにはどうすればよいですか。
UserControl
を使用してどうすればよいですか?
TargetType
で定義されているものと同じタイプのすべてのコントロールに汎用的に適用できるように、定義済みのスタイルからx:Key
を削除する必要があります。
MSDNから Style.TargetType Property を引用するには:
X:Keyを設定せずにTargetTypeプロパティをTextBlockタイプに設定すると、x:Keyが暗黙的に{x:Type TextBlock}に設定されます。 これは、[...]スタイルに{x:Type TextBlock}以外のx:Key値を指定した場合、スタイルがすべてのTextBlock要素に自動的に適用されないことも意味します。代わりに、スタイルをTextBlock要素に明示的に適用する必要があります。
次のように、UserControlのスタイルを直接設定できます。
<UserControl x:Class="MyNamespace.MyControl" xmlns:local="MyNamespace" ...>
<UserControl.Style>
<Style>
<Setter Property="local:MyControl.MyProperty" Value="..."/>
...
</Style>
</UserControl.Style>
</UserControl>
またはこのように:
<UserControl x:Class="MyNamespace.MyControl" xmlns:local="MyNamespace" ...>
<UserControl.Style>
<Style TargetType="local:MyControl">
<Setter Property="MyProperty" Value="..."/>
...
</Style>
</UserControl.Style>
</UserControl>
UserControlのリソースのデフォルトスタイルも機能するはずです。
<UserControl x:Class="MyNamespace.MyControl" xmlns:local="MyNamespace" ...>
<UserControl.Resources>
<Style TargetType="local:MyControl">
<Setter Property="MyProperty" Value="..."/>
...
</Style>
</UserControl.Resources>
</UserControl>
ユーザーコントロールのxamlで、リソースタグ内にスタイルを配置します。
<UserControl>
<UserControl.Resources>
<Style ...</Style>
</UserControl.Resources>
//.. my other components
</UserControl>
すべてのコントロールのスタイルを設定するには、ResourceDictionaryをApp.xamlのリソースに追加します。
<Application.Resources>
<!-- Your Resources for the whole application here -->
</Application.Resources>
アプリでメインウィンドウを開いた場合...
<Application ...
MainWindow="MainWindow">
または起動イベント中に...
<Application ...
MainWindow="MainWindow">
Startup="Application_Startup">
リソースは、MainWindowのすべてのコントロールで使用できます。
特定のユーザーコントロールのスタイルを設定するには、以下を参照してください。 ユーザーコントロールのスタイルを設定