web-dev-qa-db-ja.com

すべてのコントロールをターゲットにする方法(WPFスタイル)

すべての要素に適用されるスタイルを指定できますか?私は試した

<Style TargetType="Control">
    <Setter Property="Margin" Value="0,5" />
</Style>

しかし、それは何もしませんでした

79
Jiew Meng

作成したStyleは、Controlから派生した要素ではなく、Controlのみを対象としています。 x:Keyを設定しないと、暗黙的にTargetTypeに設定されるため、場合によってはx:Key="{x:Type Control}"になります。

StyleTargetTypeから派生するすべての要素を対象とするStyleを指定する直接的な方法はありません。他にもいくつかのオプションがあります。

次のStyleがある場合

<Style x:Key="ControlBaseStyle" TargetType="{x:Type Control}">
    <Setter Property="Margin" Value="50" />
</Style>

たとえば、すべてのButtonsをターゲットにできます

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ControlBaseStyle}"/>

または、任意の要素でスタイルを直接使用します。 Button

<Button Style="{StaticResource ControlBaseStyle}" ...>
102
Fredrik Hedblad

Fredrik Hedbladが答えたように、コントロールから継承したすべての要素に影響を与えることができます。

ただし、たとえば同じスタイルのテキストブロックとボタンにスタイルを適用することはできません。

それを行うには:

    <Style x:Key="DefaultStyle" TargetType="{x:Type FrameworkElement}">
        <Setter Property="Control.Margin" Value="50"/>
    </Style>
    <Style TargetType="TextBlock" BasedOn="{StaticResource DefaultStyle}"/>
    <Style TargetType="Button" BasedOn="{StaticResource DefaultStyle}"/>
3
qazwsx123