自定义菜单分隔符通过Generic.xaml模板化

时间:2011-11-06 18:34:17

标签: wpf menu separator

我开发了一个扩展WPF Menu / MenuItem类的DLL库,其中包含一些包括外观在内的功能。该库包含以下类:

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

每个类都有一个静态构造函数来覆盖DefaultStyleKey,因此MyMenuMyMenuItem使用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> 

所以我的问题是:如何通过Generic.xaml实现风格化的派生菜单Separator

1 个答案:

答案 0 :(得分:2)

您不应该需要Separator的新子类,您也可以通过在菜单Separators中嵌入Style来设置菜单中显示的Style的样式。 s Resources