Visual Studio でカスタム コントロールを作成すると、静的コンストラクターが自動的に追加されます。
static MyListBoxItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyListBoxItem), new FrameworkPropertyMetadata(typeof(MyListBoxItem)));
}
スタイル
<Style TargetType="{x:Type c:MyListBoxItem}">
<Style.Resources>
<!--SelectedItem with focus-->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />
</Style.Resources>
</Style>
次に、空のレイアウトを提供します。静的コンストラクターにコードがなければ、レイアウトは正しいです。OverridesDefaultStyle
true に設定しない限り。
スタイルに追加 BasedOn="{StaticResource {x:Type ListBoxItem}}"
すると、静的コンストラクター コードの有無にかかわらず、レイアウトは正しくなります。OverridesDefaultStyle
もう効果はありません。
カスタム コントロールのスタイルは、基本型のスタイルにデフォルト設定することをお勧めします。静的コンストラクターのコードを省略できるように見えます。
しかし、なぜデフォルトで生成されるのでしょうか?