我正在处理直接从Control
派生的自定义WPF控件。在我的控件构造函数中,我设置了DefaultStyleKey
,如此:
public MyControl()
{
DefaultStyleKey = typeof(MyControl);
}
我在名为ResourceDictionary
的{{1}}中定义了控件的样式:
MyControl.xaml
我从我的主<ResourceDictionary>
<Style TargetType="{x:Type controls:MyControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
...
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
链接到此ResourceDictionary
:
ResourceDictionary
当我运行该应用程序时,我收到一条<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!-- set some application-wide styles for various controls -->
<ResourceDictionary Source="Button.xaml"/>
<ResourceDictionary Source="TextBox.xaml"/>
<ResourceDictionary Source="ProgressBar.xaml"/>
...
<ResourceDictionary Source="MyControl.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
,其中包含消息&#34; 初始化&#39; MyControl&#39;抛出异常。&#34;最内部的例外是&#34; 无法定位资源&#39; button.xaml&#39; &#34;。如果我从XamlParseException
的构造函数中删除DefaultStyleKey = typeof(MyControl)
行,则运行应用程序时没有问题(尽管控件不可见,因为它没有设置模板)。
我是否错误地指定了我的控件的默认样式?为什么异常似乎是从主MyControl
(导入ResourceDictionary
)的无关部分抛出的?
答案 0 :(得分:0)
使用WPF您使用以下ctor
static MyControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl),
new FrameworkPropertyMetadata(typeof(MyControl)));
}
如果这是在类库中,则需要在项目的“Themes”文件夹中定义“Generic.xaml”文件。否则,可以在App.xaml
中定义主题样式(MyControl样式)