每当我将DataTemplate附加到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>
发布于 2009-08-21 16:15:34
这是因为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>
https://stackoverflow.com/questions/1312895
复制相似问题