J'ai une structure de données simple (les propriétés sont bien sûr des propriétés de dépendance):Reliure Menu ItemsSource à une structure de données récursive
class MenuData{
public string Header {get; protected set;}
public ObservableCollection<MenuData> Items { get; protected set; }
}
ObservableCollection<MenuData> Menus {get; protected set;}
Je veux lier la propriété Menus comme élément de menu ItemsSource. Le résultat devrait ressembler à la barre de menu Windows standard: Le premier niveau d'éléments sera aligné horizontalement avec les sous-éléments cachés dans les sous-menus.
J'ai expérimenté avec XAML pour créer le premier niveau pour l'instant (la barre de menu horizontale):
<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>
J'ai utilisé ma surcharge personnalisée de MenuItem, parce que le ItemTemplate est déjà enveloppé dans la balise MenuItem pour l'élément de menu, donc je devais me débarrasser de cette:
class MenuElement: System.Windows.Controls.Menu
{
protected override DependencyObject GetContainerForItemOverride()
{
return new System.Windows.Controls.ContentPresenter();
}
}
Mais le résultat est tout faux (notez le point culminant étant trop grand et les flèches sous-menu)
Pourriez-vous s'il vous plaît me diriger dans une bonne direction afin que je puisse faire ce travail?
Merci pour toute aide.