2010-09-09 23 views
7

Alt menü öğelerini ItemsSource -property'den dinamik olarak oluşturan bir MenuItem var.Dinamik olarak oluşturulmuş MenuItem Ayırıcı WPF optik stili MVVM

Gruplandırma için menüde Ayırıcılarım var. Ayırıcı, MenuItem.ItemContainerStyle'un bir ControlTemplate öğesi tarafından ItemsSource-koleksiyonundaki her boş giriş için oluşturulur.

Bu iyi çalışır, ancak ayırıcı, diğer ayırıcıların bir menü Öğeleri koleksiyonuna yerleştirilenlerle aynı optik stiline sahip değildir.

"Normal" menü öğesi ayırıcılara eşit görünecek şekilde ayırıcının görünümünü değiştirmenin bir yolu var mı? anahtar olarak MenuItem.SeparatorStyleKey ile System.Resources bildirilen bir stil yoktur

<MenuItem.ItemContainerStyle> 
    <Style TargetType="MenuItem"> 
    <Setter Property="Header" Value="{Binding Title}"/> 
    <Setter Property="Command" Value="{Binding Command}"/> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding }" Value="{x:Null}"> 
      <Setter Property="Template" > 
       <Setter.Value> 
        <ControlTemplate> 
         <Separator /> <!-- THIS SEPARATOR IS NOT SHOWN AS COMMON MENUITEM-SEPARATORS ARE --> 
        </ControlTemplate>           
       </Setter.Value> 
      </Setter> 
     </DataTrigger>        
    </Style.Triggers> 
    </Style> 
</MenuItem.ItemContainerStyle> 

cevap

15

yılında SEPERATOR sarma: Burada

kullandığım koddur. ebeveyn Menuıtem normalde tip Ayırıcı çocuklar üzerindeki stilini ayarlar, ama sizin Menuıtem olduğundan, böyle olmaz, bu nedenle elle yapmak zorunda kalacaktır:

<Separator Style="{StaticResource {x:Static MenuItem.SeparatorStyleKey}}" /> 

Ayrıca Bea Stollnitz blog okumak isteyebilirsiniz Başka bir yaklaşım için giriş "How do I insert Separator objects in a data bound MenuItem?".

0

deneyin bir Menuıtem

<ControlTemplate> 
    <MenuItem> 
    <MenuItem.Header> 
     <Separator /> 
    </MenuItem.Header> 
    </MenuItem> 
</ControlTemplate> 
+0

Cevabınız için teşekkürler. İyi bir fikir ama ne yazık ki yardım etmiyor. Ayırıcı eşit görünüyor, ancak çocuk olarak ek olarak seçilebilen bir MenüItem var (ayırıcı devre dışı değilse sonda seçilebilir). – HCL