使用一个菜单项一个DataTemplate导致左侧额外的空间出现? [英] Using a DataTemplate for a MenuItem causes extra space on the left side to appear?
问题描述
每当我附上一个DataTemplate到一个菜单项,每次生成的菜单项获得左侧一个额外的空间。这额外的空间看起来一样宽的检查,我使用保留的空间。手动建立一个菜单没有一个DataTemplate不添加此额外的空间。作为一个额外的皱纹,如果我点击这个额外空间的菜单项消失,但不会产生点击事件。我不知道为什么它添加此额外的空间。 ?任何想法
我的XAML代码得不能再简单:
菜单所描述的多余的空格:
<菜单>
<菜单项标题=公敌的ItemsSource ={结合AvailableEnemyClasses}>
< MenuItem.ItemTemplate>
<&DataTemplate的GT;
<菜单项标题={结合}>
< /菜单项>
< / DataTemplate中>
< /MenuItem.ItemTemplate>
< /菜单项>
< /菜单>
菜单没有多余的空格:
<菜单>
<菜单项标题=工具>
<菜单项标题=Enemy01/>
<菜单项标题=Enemy02/>
<菜单项标题=Enemy03/>
< /菜单项>
< /菜单>
这是因为你的<$ C产生的可视化树$ C>的DataTemplate 将被包装在一个容器 - 在这种情况下,菜单项
。因此,你实际上有一个菜单项
中的菜单项
,这也解释了额外的空间和缺乏交互性。有没有需要包含菜单项
<在的ItemTemplate
。
p>您的例子可能不是写为:
<菜单>
<菜单项标题=公敌的ItemsSource ={结合AvailableEnemyClasses}>
< MenuItem.ItemTemplate>
<&DataTemplate的GT;
< TextBlock的文本={结合}/>
< / DataTemplate中>
< /MenuItem.ItemTemplate>
< /菜单项>
< /菜单>
或者,也许更简洁:
<菜单>
<菜单项标题=公敌的ItemsSource ={结合AvailableEnemyClasses}>
< MenuItem.ItemContainerStyle>
<风格的TargetType =菜单项>
< setter属性=标题VALUE ={结合}/>
< setter属性=器isChecked>
< Setter.Value>
< MultiBinding转换器={StaticResource的YourConverter}>
<绑定... />
<绑定... />
< / MultiBinding>
< /Setter.Value>
< /二传手>
< /样式和GT;
< /MenuItem.ItemContainerStyle>
< /菜单项>
< /菜单>
Whenever I attach a DataTemplate to a MenuItem, each generated menu item gets an extra space on the left side. This extra space looks as wide as the space reserved for the check, which I use. Building a menu manually without a DataTemplate doesn't add this extra space. As an extra wrinkle, if I click on this extra space the menu item goes away but no click event is generated. I don't know why it's adding this extra space. Any ideas?
my xaml code couldn't be more simpler:
Menu with the described extra spaces:
<Menu>
<MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}">
<MenuItem.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding}">
</MenuItem>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</Menu>
Menu without extra spaces:
<Menu>
<MenuItem Header="Utilities" >
<MenuItem Header="Enemy01"/>
<MenuItem Header="Enemy02"/>
<MenuItem Header="Enemy03"/>
</MenuItem>
</Menu>
It's because the visual tree produced by your DataTemplate
will be wrapped in a container - in this case, a MenuItem
. Therefore, you actually have a MenuItem
within a MenuItem
, which explains the extra space and the lack of interactivity. There's no need to include the MenuItem
in your ItemTemplate
.
Your example might instead be written as:
<Menu>
<MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}">
<MenuItem.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</Menu>
Or, perhaps more succinctly:
<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>
这篇关于使用一个菜单项一个DataTemplate导致左侧额外的空间出现?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!