0

ToggleButton を継承するカスタム コントロール ColorToggleButton を作成しました。対応する .xaml ファイルでは、ColorToggleButton は TargetType および BasedOn ToggleButton によって固有です。

<Style TargetType="ctl:ColorToggleButton" BasedOn="{StaticResource {x:Type ToggleButton}}">

これは問題なく動作しますが、次のように x:Key を使用してウィンドウに別のスタイルを適用すると、

<Style x:Key="SameContent"><Setter Property="Content" Value="Same Content" /></Style>
<ctl:ColorToggleButton Style={StaticResource SameContent} />

古いスタイルは完全に一掃され、新しいスタイルに置き換わるようです。BasedOn を使用して問題を回避できます

<Style x:Key="SameContent" BasedOn="{StaticResource {x:Type ctl:ColorToggleButton}}"><Setter Property="Content" Value="Same Content" /></Style>
<ctl:ColorToggleButton Style={StaticResource MyKey} />

しかし、通常の ToggleButton やその他のデフォルト コントロールにスタイルを適用する場合、BasedOn 属性を使用しないことを考えると、これは直感に反するように思えます。これは、独自のコントロールを実装する標準的な方法ですか? 私はひどく間違ったことをしていますか?

編集: ColorToggleButton の静的コンストラクターは次のとおりです。

static ColorToggleButton()
{
    DefaultStyleKeyProperty.OverrideMetadata(typeof(ColorToggleButton), new FrameworkPropertyMetadata(typeof(ColorToggleButton)));
}
4

1 に答える 1

1

あなたのコントロールでは、静的コンストラクターにDefaultStyleKeyPropertyオーバーライドを提供しましたか?

static ColorToggleButton()
{
            DefaultStyleKeyProperty.OverrideMetadata(typeof(ColorToggleButton), new FrameworkPropertyMetadata(typeof(ColorToggleButton)));
}
于 2012-12-03T17:29:12.670 に答える