wpf为自定义控件创建样式

时间:2015-08-10 14:25:32

标签: wpf custom-controls

我有一个继承自另一个(第三方)控件的自定义控件:

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”。

有人知道我为什么会收到此错误吗?

1 个答案:

答案 0 :(得分:0)

将此添加到自定义控件的静态构造函数中,否则它将使用Xceed.Wpf.Toolkit.IntegerUpDown的样式或任何基类设置​​默认样式键的样式:

static Int32EditBox()
{
    DefaultStyleKeyProperty.OverrideMetadata(typeof(Int32EditBox), new FrameworkPropertyMetadata(typeof(Int32EditBox)));
}

为了让BasedOn工作,在可视化树中必须有另一种具有该键的样式。