2009-06-01 28 views
4

Ich verwende einen ObjectDataProvider und eine DataTemplate, um ein MenuItem in meiner Menüleiste aufzufüllen. (WPF, C#/XAML) Siehe unten.WPF MenuItem untergeordnete Elemente werden nicht angezeigt

Ergebnis: Der obere Menüeintrag erscheint, wenn ich darauf klicke, erscheint der Umbruchmenüpunkt (derjenige mit dem gebundenen Kopftext) zusammen mit dem kleinen Pfeil, der das Vorhandensein von Kindern anzeigt, aber nicht oder nicht Zeigen Sie den Kindern, dass sie nicht zugänglich sind.

Erwartetes Ergebnis: Die Kinder sind sichtbar und verhalten sich ordnungsgemäß.

Snippet:

<ObjectDataProvider x:Key="Brokers" ObjectInstance="{x:Static brokers:BrokerManager.Instance}" MethodName="GetBrokers" IsAsynchronous="True" /> 
     <DataTemplate x:Key="BrokerMenuItem" DataType="IBroker"> 
      <MenuItem Header="{Binding Path=Name}"> 
       <MenuItem Header="Connect" /> 
       <MenuItem Header="Disconnect" /> 
      </MenuItem> 
     </DataTemplate> 

<MenuItem Header="Brokers" ItemsSource="{Binding Source={StaticResource Brokers}}" ItemTemplate="{DynamicResource BrokerMenuItem}"/> 

Antwort

0

Nachdem ich über eine Woche lang gesucht habe, habe ich endlich herausgefunden, wie das funktioniert. Es stellt sich heraus, dass DataTemplates für dynamische Menüs nicht zu gut funktionieren. Die richtige Methode dazu ist die ItemContainerStyle-Eigenschaft von MenuItem. (Oder ist das ItemStyleContainer?)

Erstellen Sie einfach einen Stil, um die Kopfzeile zu überschreiben und es auf was auch immer Sie benötigen einzustellen. Ich überging die ItemsSource, um meine Kinder einzubeziehen. Sei aber hier vorsichtig, da die Kinder den Stil erben werden und beide die gleichen Kinder haben und ein rekursives Menü erzeugen. Sie müssen die ItemsSource Ihrer Kinder überschreiben und sie auf ein leeres x: Array oder Ähnliches setzen.

Es gibt mehrere Blogs, die beschreiben, wie ItemContainerStyle zu verwenden, überprüfen Sie sie aus.

0

ItemSource Eigenschaft menuitem Steuerung für das Geben Childes für das Element verwendet wird, versuchen <ContentPresenter /> mit diesem Datatemplate zu verwenden.

1

arsenmrkt: Ich habe genau das gleiche Problem, wenn ich ein MenuItem mit einem DataTemplate bevölkere, kann ich scheinen, keine Kinder zu irgendwelchen erzeugten Gegenständen hinzuzufügen. Ich verstehe Ihre Antwort nicht, aber wie sollte ich den ContentPresenter verwenden, um dieses Problem zu umgehen?

EDIT: Eigentlich war mein Problem nicht genau das gleiche, da ich versuche, eine Sammlung von Sammlungen an ein Menü zu binden. Ich glaube, ich habe es bekommen, obwohl mit der HierarchicalDataTemplate zu arbeiten:

<Menu> 
    <MenuItem Header="{Binding Name}" ItemsSource="{Binding MenuOptions}"> 
     <MenuItem.ItemTemplate> 
      <HierarchicalDataTemplate ItemsSource="{Binding Categories}"> 
       <MenuItem Header="{Binding Name}"/> 
       <HierarchicalDataTemplate.ItemTemplate> 
        <DataTemplate> 
         <MenuItem Header="{Binding Name}"/> 
        </DataTemplate> 
       </HierarchicalDataTemplate.ItemTemplate> 
      </HierarchicalDataTemplate> 
     </MenuItem.ItemTemplate> 
    </MenuItem> 
</Menu> 

diese Hilfe Does Sie NicholasF?

Verwandte Themen