我有一个继承自另一个(第三方)控件的自定义控件:
public class Int32EditBox : Xceed.Wpf.Toolkit.IntegerUpDown { }
然后,我尝试为此控件创建一个样式:
xmlns:Controls="clr-namespace:MyApp.Controls;assembly=MyApp.Controls"
...
<Style TargetType="{x:Type Controls:Int32EditBox}" BasedOn="{StaticResource {x:Type Controls:Int32EditBox}}">
<Setter Property="ContextMenu" Value="{StaticResource DefaultDesignerContextMenu}" />
<Setter Property="IsReadOnly" Value="True" />
</Style>
问题是我收到一条错误消息,指出找不到资源“MyApp.Control.Int32EditBox”。
有人知道我为什么会收到此错误吗?
答案 0 :(得分:0)
将此添加到自定义控件的静态构造函数中,否则它将使用Xceed.Wpf.Toolkit.IntegerUpDown的样式或任何基类设置默认样式键的样式:
static Int32EditBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(Int32EditBox), new FrameworkPropertyMetadata(typeof(Int32EditBox)));
}
为了让BasedOn工作,在可视化树中必须有另一种具有该键的样式。