2009-08-21 8 views
16

Bir MenuTtem'e bir DataTemplate iliştirdiğimde, oluşturulan her menü öğesinin sol tarafında fazladan boşluk olur. Bu ekstra alan, kullandığım çek için ayrılan alan kadar geniş görünüyor. DataTemplate olmadan manuel olarak bir menü oluşturmak bu ekstra alanı eklemez. Ekstra kırışıklık olarak, bu ekstra alana tıklarsam menü öğesi kaybolur ancak tıklama olayı oluşmaz. Bu ekstra alanı neden eklediğini bilmiyorum. Herhangi bir fikir?MenuItem için DataTemplate kullanmak, sol tarafta daha fazla alanın görünmesine neden oluyor?

benim xaml kodu daha basit olamazdı: anlatıldığı fazladan boşluk

Menü: Bu görsel ağaç üretilen çünkü

<Menu> 
    <MenuItem Header="Utilities" > 
     <MenuItem Header="Enemy01"/> 
     <MenuItem Header="Enemy02"/> 
     <MenuItem Header="Enemy03"/> 
    </MenuItem> 
</Menu> 
+0

fazla bilgi: https://github.com/fluentribbon/Fluent.Ribbon/issues/ 188 – juFo

+0

ve ayrıca bkz: http://stackoverflow.com/questions/19965464/wpf-menuitem-icon-in-the-wrong-place-when-using-data-template?rq=1 – juFo

cevap

39

: ekstra boşluksuz

<Menu> 
    <MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}"> 
     <MenuItem.ItemTemplate> 
      <DataTemplate> 
       <MenuItem Header="{Binding}"> 
       </MenuItem> 
      </DataTemplate> 
     </MenuItem.ItemTemplate> 
    </MenuItem> 
</Menu> 

Menüsü senin DataTemplate tarafından bir kap içinde sarılmış olacak - bu durumda, bir MenuItem. Bu nedenle, MenuItem içinde bir MenuItem var, bu da ekstra alanı ve etkileşim eksikliğini açıklıyor. MenuItem ürününü ItemTemplate ürününe eklemenize gerek yoktur.

Sizin örnek yerine olarak yazılmış olabilir: belki daha özlü

<Menu> 
    <MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}"> 
     <MenuItem.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding}"/> 
      </DataTemplate> 
     </MenuItem.ItemTemplate> 
    </MenuItem> 
</Menu> 

Veya:

<Menu> 
    <MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}"> 
     <MenuItem.ItemContainerStyle> 
      <Style TargetType="MenuItem"> 
       <Setter Property="Header" Value="{Binding}"/> 
       <Setter Property="IsChecked"> 
        <Setter.Value> 
         <MultiBinding Converter="{StaticResource YourConverter}"> 
          <Binding .../> 
          <Binding .../> 
         </MultiBinding> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </MenuItem.ItemContainerStyle> 
    </MenuItem> 
</Menu> 
+0

Cevabınız için teşekkürler! Başka bir sorum vardı: Bir ItemContainerStyle ile, MenuItem'in IsChecked özelliğini bir çok öğeye nasıl bağlarım? – djcouchycouch

+0

Sorun değil. Bu muhtemelen ayrı bir soru olmalı, ama nasıl olduğunu göstermek için cevabımı güncelledim. –

+0

Ah, şimdi anlıyorum. Teşekkürler Kent! – djcouchycouch