2010-10-29 26 views
0

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)

alt text

Pourriez-vous s'il vous plaît me diriger dans une bonne direction afin que je puisse faire ce travail?

Merci pour toute aide.

Répondre