私は単純なデータ構造を持っています (プロパティはもちろん依存関係プロパティです):
class MenuData{
public string Header {get; protected set;}
public ObservableCollection<MenuData> Items { get; protected set; }
}
ObservableCollection<MenuData> Menus {get; protected set;}
Menus プロパティを Menu 要素 ItemsSource としてバインドしたいと考えています。結果は、標準の Windows メニュー バーのようになります。アイテムの最初のレベルは水平に並べられ、サブアイテムはサブメニューで非表示になります。
XAML を試して、最初のレベル (水平メニュー バー) を作成しました。
<my:MenuElement ItemsSource="{Binding Menus}">
<my:MenuElement.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Header}">
<!-- Try to add some sub-menus to see what it is going to look like. -->
<MenuItem Header="A" />
<MenuItem Header="A" />
<MenuItem Header="A" />
<MenuItem Header="A" />
</MenuItem>
</DataTemplate>
</my:MenuElement.ItemTemplate>
</my:MenuElement>
ItemTemplate は既に Menu 要素の MenuItem タグにラップされているため、MenuItem のカスタム オーバーロードを使用したため、それを取り除く必要がありました。
class MenuElement: System.Windows.Controls.Menu
{
protected override DependencyObject GetContainerForItemOverride()
{
return new System.Windows.Controls.ContentPresenter();
}
}
しかし、結果はすべて間違っているように見えます (ハイライトが大きすぎて、サブメニューの矢印に注意してください)。
私がこれを機能させることができるように、私を正しい方向に向けてください。
助けてくれてありがとう。