2013-10-14 2 views
0

В МОФ я наследовать от класса 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}" /> 

где с: ен д: мои пространств имен. MenuItems является DependencyProperty из 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}"> 

Визуальная студия дизайнер говорит: TargetType 'кнопку MENU' не тип соответствия элемента «MenuButton». Код работает нормально, но конструктору не удается вызвать конструктор моего класса MenuButton. При комментировании этой строки ошибка исчезает, но тогда стиль не применяется и наоборот.

+0

Не уверено, что если он релевантен, но 'this.Style = FindResource («кнопка MENU»), как стиль,' не должен быть в конструкторе. вы можете переопределить метод OnApplyTemplate() и применить его там. –

+0

Это помогает! Эффект заключается в том, что стиль применяется во время выполнения не во время разработки, по крайней мере, нет ошибки. Почему стиль не разрешен в конструкторе? – Gerard

+0

Проверьте ответ Джона на мой [вопрос] (http://stackoverflow.com/questions/19363082/why-does-resources-cannot-be-fetched-in-a-controls-constructor). –

ответ

1

this.Style = FindResource("MenuButton") as Style; не должен отображаться в конструкторе.

Вы можете применить его в методе OnApplyTemplate

public overrride OnApplyTemplate() 
{ 
    this.Style = FindResource("MenuButton") as Style; 
    base.OnApplyTemplate(); 
} 

Надеется, что это помогает

+1

Любая идея, как применить стиль и во время разработки? – Gerard

Смежные вопросы