web-dev-qa-db-ja.com

デフォルトのスタイルからスタイルを継承

私のプロジェクトでは、テキストボックスのカスタムスタイルがあります。次のように定義されます。

<Style TargetType="TextBox"/>

したがって、デフォルトですべてのテキストボックスの子コントロールに適用されます。

デフォルトスタイルに基づく別のスタイルを作成する必要があります。しかし、新しいスタイルでデフォルトのスタイルを使用するようにBasedOn属性で指定するにはどうすればよいですか?

31

拡張したいコントロールのタイプを使用します

BasedOn="{StaticResource {x:Type TextBox}}"

完全な例:

<Style x:Key="NamedStyle" TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
    <Setter property="Opacity" value="0.5" />
</Style>
62
Aphelion

@Aphelionが正解です。 ResourceDictionaryマターでアイテムが定義される順序を追加したいと思います。

スライダーのデフォルトスタイルをオーバーライドし、それに基づいて別のスライダースタイルを作成する場合は、オーバーライドスタイルの後に「ベース」スライダーを宣言する必要があります。

たとえば、次のようにした場合:

<Style x:Key="BlueSlider" TargetType="{x:Type Slider}" BasedOn="{StaticResource {x:Type Slider}}">
    <Setter Property="Background" Value="Blue"/>
</Style>

<Style TargetType="{x:Type Slider}">
    <Setter Property="Foreground" Value="Yellow"/>
</Style>

BlueSliderの背景は青色で、前景はデフォルトの(白)です。

しかし、これを行うと:

<Style TargetType="{x:Type Slider}">
    <Setter Property="Foreground" Value="Yellow"/>
</Style>

<Style x:Key="BlueSlider" TargetType="{x:Type Slider}" BasedOn="{StaticResource {x:Type Slider}}">
    <Setter Property="Background" Value="Blue"/>
</Style>

BlueSliderの背景は青、前景は黄色になります。

0
Peter Boone