web-dev-qa-db-ja.com

WPF UserControlのスタイルを設定する

属性を追加することで、コントロールで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>

しかし、UserControlResourceDictionaryのスタイルを直接次のように設定できる方法はありますか。

<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行目がアプリケーションのすべてのコントロールにスタイルを適用する場合、通常のコントロールで同様のことを行うと、このアプローチが機能します。

ただし、これはBackgroundUserControlのみを設定するので、コンポーネントに同じ背景を適用するにはどうすればよいですか。

UserControlを使用してどうすればよいですか?

9
TheLethalCoder

TargetTypeで定義されているものと同じタイプのすべてのコントロールに汎用的に適用できるように、定義済みのスタイルからx:Keyを削除する必要があります。

MSDNから Style.TargetType Property を引用するには:

X:Keyを設定せずにTargetTypeプロパティをTextBlockタイプに設定すると、x:Keyが暗黙的に{x:Type TextBlock}に設定されます。 これは、[...]スタイルに{x:Type TextBlock}以外のx:Key値を指定した場合、スタイルがすべてのTextBlock要素に自動的に適用されないことも意味します。代わりに、スタイルをTextBlock要素に明示的に適用する必要があります。

1
slugster

次のように、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>
2
Clemens

ユーザーコントロールのxamlで、リソースタグ内にスタイルを配置します。

<UserControl>
    <UserControl.Resources>
       <Style ...</Style>
    </UserControl.Resources>

    //.. my other components
</UserControl>
1
JJ_Coder4Hire

すべてのコントロールのスタイルを設定するには、ResourceDictionaryをApp.xamlのリソースに追加します。

<Application.Resources>
 <!-- Your Resources for the whole application here -->
</Application.Resources>

アプリでメインウィンドウを開いた場合...

<Application ...
MainWindow="MainWindow">

または起動イベント中に...

<Application ...
MainWindow="MainWindow">
Startup="Application_Startup">

リソースは、MainWindowのすべてのコントロールで使用できます。

特定のユーザーコントロールのスタイルを設定するには、以下を参照してください。 ユーザーコントロールのスタイルを設定

0
Fruchtzwerg