【发布时间】:2015-08-10 14:25:32
【问题描述】:
我有一个继承自另一个(第三方)控件的自定义控件:
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”。
有人知道我为什么会收到这个错误吗?
【问题讨论】:
-
您的目标类型似乎与您的 BasedOn 类型相同,这对我来说似乎不正确。该样式将继承任何先前定义的样式到该类型 - 无需基于任何我能告诉的内容。
-
我试图省略“BasedOn”的东西,但看起来它是必需的。比那更多的。我有“默认” wpf 控件的其他样式,如下所示:
<Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}"> <Setter Property="ContextMenu" Value="{StaticResource DefaultDesignerContextMenu}" /> <Setter Property="IsReadOnly" Value="True" /> </Style>并且它有效 -
您是否覆盖了自定义控件中的 DefaultStyleKey?
-
没有。我应该这样做吗?
标签: wpf custom-controls