当我在 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
没有效果了。
我希望自定义控件的样式默认为基本类型的样式。在我看来,静态构造函数中的代码似乎可以省略。
但是为什么会默认生成呢?