2009-08-21 47 views
16

每當我將一個DataTemplate附加到一個MenuItem時,每個生成的菜單項都會在左側獲得一個額外的空間。這額外的空間看起來像我使用的支票預留的空間一樣寬。無需Dat​​aTemplate手動構建菜單不會添加此額外空間。作爲一個額外的皺紋,如果我點擊這個額外的空間,菜單項會消失,但不會產生點擊事件。我不知道爲什麼它增加了這個額外的空間。有任何想法嗎?對MenuItem使用DataTemplate會導致左側出現額外空間?

我的XAML代碼得不能再簡單:

菜單與描述多餘的空格:

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

菜單沒有多餘的空格:

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

更多信息:https://github.com/fluentribbon/Fluent.Ribbon/issues/ 188 – juFo 2016-05-09 12:54:24

+0

並參見:http://stackoverflow.com/questions/19965464/wpf-menuitem-icon-in-the-wrong-place-when-using-data-template?rq=1 – juFo 2016-05-09 13:54:12

回答

39

這是因爲可視化樹生產通過您的DataTemplate將被包裹在一個容器中 - 在這種情況下,MenuItem。因此,您實際上在MenuItem之內有MenuItem,這解釋了額外的空間和缺乏交互性。沒有必要在您的ItemTemplate中包含MenuItem

你舉的例子可能反而被寫爲:

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

或者,也許更簡潔:

<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

感謝您的回答!我有另一個問題:使用ItemContainerStyle,我將如何將MenuItem的IsChecked屬性綁定到多重綁定? – djcouchycouch 2009-08-21 18:26:27

+0

沒問題。這應該是一個單獨的問題,但我更新了我的答案,告訴你如何。 – 2009-08-21 18:33:37

+0

啊,現在我明白了。謝謝肯特! – djcouchycouch 2009-08-21 18:35:46