2009-08-21 82 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

相关问题