每当我将DataTemplate附加到MenuItem时,每个生成的菜单项都会在左侧获得额外的空间.这个额外的空间看起来和我使用的支票预留空间一样宽.在没有DataTemplate的情况下手动构建菜单不会添加此额外空间.作为额外的皱纹,如果我点击这个额外的空间,菜单项就会消失,但不会生成任何点击事件.我不知道为什么它会增加这个额外的空间.有任何想法吗?
我的xaml代码不能再简单了:
带有描述的额外空间的菜单:
<Menu>
<MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}">
<MenuItem.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding}">
</MenuItem>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</Menu>
Run Code Online (Sandbox Code Playgroud)
没有额外空间的菜单:
<Menu>
<MenuItem Header="Utilities" >
<MenuItem Header="Enemy01"/>
<MenuItem Header="Enemy02"/>
<MenuItem Header="Enemy03"/>
</MenuItem>
</Menu>
Run Code Online (Sandbox Code Playgroud)
Ken*_*art 45
这是因为你生产的视觉树DataTemplate将被包裹在一个容器中 - 在这种情况下,一个MenuItem.因此,你实际上有一个MenuItem内部MenuItem,这解释了额外的空间和缺乏交互性.没有必要包含MenuItem你的ItemTemplate.
您的示例可能会写为:
<Menu>
<MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}">
<MenuItem.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</Menu>
Run Code Online (Sandbox Code Playgroud)
或者,也许更简洁:
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13487 次 |
| 最近记录: |