在WPF我從Button類繼承:WPF設計不能申請樣式
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:恩d:是我的命名空間。 MenuItems
是用戶控件MenuButtons
的一個DependencyProperty,並在一個類被聲明如下:
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的設計師說: '菜單按鈕' 的TargetType不匹配元素「MenuButton」的類型。代碼運行良好,但設計者無法調用我的MenuButton類的構造函數。當註釋掉該行時,錯誤消失,但是樣式不適用,反之亦然。
不知道,如果是相關的,但是'this.Style = FindResource(「菜單按鈕」)的風格;'不應該在構造函數中。你可以重寫'OnApplyTemplate()'方法並在那裏應用。 –
這有幫助!其效果是該樣式在運行時不在設計時應用,至少沒有錯誤。爲什麼樣式不允許在構造函數中使用? – Gerard
查看Jon的回答我的[問題](http://stackoverflow.com/questions/19363082/why-does-resources-cannot-be-fetched-in-a-controls-constructor)。 –