使用一个菜单项一个DataTemplate导致左侧额外的空间出现? [英] Using a DataTemplate for a MenuItem causes extra space on the left side to appear?

查看:128
本文介绍了使用一个菜单项一个DataTemplate导致左侧额外的空间出现?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

每当我附上一个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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆