在 Wpf 中,我继承自 Button 类:
public class MenuButton : Button
{
public MenuButton()
{
this.Style = FindResource("MenuButton") as Style;
}
public MenuButton(string caption, ICommand command)
: this()
{
SetValue(ContentProperty, caption);
this.command = command;
}
}
在窗口中,我添加了一个控件
<c:MenuButtons x:Name="MenuProject" c:MenuItems="{x:Static d:MenuItems.Project}" />
其中 c: en d: 是我的命名空间。 MenuItems
是 usercontrol MenuButtons
的依赖属性,并在类似以下内容的类中声明:
public readonly static MenuButton[] Project = new MenuButton[] { new MenuButton("Open", new Command()), ..etc };
资源的定义如下:
<Style x:Key="MenuButton"
BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
TargetType="{x:Type c:MenuButton}">
Visual Studio 設計師說:"MenuButton" TargetType 與元素 'MenuButton' 的類型不匹配。代码运行良好,但设计器在调用我的 MenuButton 类的构造函数时遇到问题。当注释掉该行时,错误消失,但随后不应用样式,反之亦然。
this.Style = FindResource("MenuButton") as Style;
不应该出现在构造函数中。
您可以在 OnApplyTemplate 方法中应用它
public overrride OnApplyTemplate()
{
this.Style = FindResource("MenuButton") as Style;
base.OnApplyTemplate();
}
希望这有帮助