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)));
}