1

スキニングを含むいくつかの機能を備えたWPF Menu/クラスを拡張する DLL ライブラリを開発しています。MenuItemこのライブラリには次のクラスがあります。

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

各クラスには静的コンストラクターがあり、DefaultStyleKeyそれをオーバーライドして、Generic.xaml で定義された既定のスタイルMyMenuを使用します。MyMenuItem

<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> 

だから私の質問は: SeparatorGeneric.xaml を介して様式化された派生メニューを実現する方法は?

4

1 に答える 1

2

の新しいサブクラスは必要ありません。あるいは、メニューのにを埋め込むことで、メニューに表示されるSeparatorスタイルを設定することもできます。SeparatorsStyleStyleResources

于 2011-11-07T19:57:34.303 に答える