Пользовательский разделитель меню на основе Generic.xaml - PullRequest
1 голос
/ 06 ноября 2011

Я разрабатываю библиотеку DLL, которая расширяет классы WPF Menu / MenuItem с некоторыми функциями, включая скины.Эта библиотека имеет следующие классы:

public class MyMenu : Menu {...}
public class MyMenuItem : MenuItem {...}

Каждый класс имеет статический конструктор для переопределения DefaultStyleKey, поэтому MyMenu и MyMenuItem используют стили по умолчанию, определенные в Generic.xaml:

<Style TargetType="{x:Type local:MyMenu}">...
<Style TargetType="{x:Type local:MyMenuItem}">...

Все отлично работает.Но мне также нужно реализовать собственное меню Separator, которое должно быть шаблонизировано через Generic.xaml.Итак, у меня есть другой класс:

public class MySeparator : Separator {...}

Я пытался использовать подход, описанный в MSDN: http://msdn.microsoft.com/en-us/library/system.windows.controls.menuitem.separatorstylekey(VS.85).aspx
Таким образом (Generic.xaml):

<Style x:Key="{x:Static local:MyMenuItem.SeparatorStyleKey}" TargetType="{x:Type local:MySeparator}">
 <Setter Property="OverridesDefaultStyle" Value="true"/>
 <Setter Property="Template">
   <Setter.Value>
     <ControlTemplate TargetType="{x:Type local:MySeparator}">
     ...
     </ControlTemplate>
   </Setter.Value>
 <Setter/>
</Style>

Но этоне работает.В моем целевом приложении я использую классы библиотеки DLL следующим образом (MainWindow.xaml):

<lib:MyMenu>
  <lib:MyMenuItem Header="Item 1"/>
  <lib:MySeparator/>
  <lib:MyMenuItem Header="Item 2"/>
</lib:MyMenu> 

Итак, мой вопрос: как реализовать производное меню Separator, стилизованное через Generic.xaml?

1 Ответ

2 голосов
/ 07 ноября 2011

Вам не нужен новый подкласс Separator, и вы можете альтернативно оформить Separators, который появляется в вашем меню, добавив Style в меню Style * Resources.

...