2016-03-30 9 views
0

Ich möchte die Menüpunkte in mehrere Spalten zeigen ..WPF Untermenü Itemspanel

I WrapPanels für Menüs

Code unten funktioniert gut für die erste Ebene verwenden möchten, aber wenn Untermenüs öffnen oder Unter Menüs von Untermenüs, es wird als normale Liste angezeigt.

Was kann getan werden, um das Standardverhalten zu überschreiben?

Hinweis: Ich verwende Itemssource, um Menüelemente (Objekte meiner eigenen Klasse) zu binden, so kann ich verschachtelte Objektstile nicht geben.

<Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource {x:Type MenuItem}}"> 
    .... 
    <Setter Property="ItemsSource" Value="{Binding Children}"/> 
    .... 
    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate> 
        <WrapPanel MaxHeight="300" Orientation="Vertical"/> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
    .... 
</Style> 

Antwort

3

Sie können auf jeder Ebene binden

  <Style TargetType="MenuItem"> 
       <Setter Property="ItemsSource" Value="{Binding Children}"/> 
        <Setter Property="ItemsPanel"> 
         <Setter.Value> 
          <ItemsPanelTemplate> 
           <WrapPanel MaxHeight="300" Orientation="Vertical"/> 
          </ItemsPanelTemplate> 
         </Setter.Value> 
        </Setter> 
        <Setter Property="ItemContainerStyle"> 
        <Setter.Value> 
          <Style TargetType="MenuItem"> 
           <Setter Property="ItemsSource" Value="{Binding Children}"/> 
           <Setter Property="ItemsPanel"> 
            <Setter.Value> 
             <ItemsPanelTemplate> 
              <WrapPanel MaxHeight="300" Orientation="Vertical"/> 
             </ItemsPanelTemplate> 
            </Setter.Value> 
           </Setter> 
           <Setter Property="ItemContainerStyle"> 
            <Setter.Value> 
             <Style TargetType="MenuItem"> 
              <Setter Property="ItemsSource" Value="{Binding Children}"/> 
              <Setter Property="ItemsPanel"> 
               <Setter.Value> 
                <ItemsPanelTemplate> 
                 <WrapPanel MaxHeight="300" Orientation="Vertical"/> 
                </ItemsPanelTemplate> 
               </Setter.Value> 
              </Setter> 
             </Style> 
            </Setter.Value> 
           </Setter> 
          </Style> 
         </Setter.Value> 
       </Setter> 
      </Style> 
+0

Ich habe kein Problem mit zu den Kindern zu binden, Alle Ebenen haben gleiche Eigenschaft namens „Kinder“, Mein Problem ist nicht die Untermenüs verwenden WrapPanel gezeigt . Stattdessen verwenden sie Stack-Panel, um die Liste anzuzeigen. – VibeeshanRC

+0

können Sie ItemsPanel für Untermenü auch wie aktualisierte Antwort setzen. – Nitin

+0

So ist es, wenn ich 10 Level der Menüleiste habe, muss ich diese Hierarchie wiederholen. – VibeeshanRC