2

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>

次に、空のレイアウトを提供します。静的コンストラクターにコードがなければ、レイアウトは正しいです。OverridesDefaultStyletrue に設定しない限り。

スタイルに追加 BasedOn="{StaticResource {x:Type ListBoxItem}}"すると、静的コンストラクター コードの有無にかかわらず、レイアウトは正しくなります。OverridesDefaultStyleもう効果はありません。

カスタム コントロールのスタイルは、基本型のスタイルにデフォルト設定することをお勧めします。静的コンストラクターのコードを省略できるように見えます。
しかし、なぜデフォルトで生成されるのでしょうか?

4

1 に答える 1