如下图所示,您可以看到2个悬停状态。这是XAML
<Menu ItemsSource="{Binding Data.MenuCollection}">
<Menu.ItemTemplate >
<DataTemplate DataType="MenuItem">
<MenuItem Header="{Binding Header}" Command="{Binding Command}" ItemsSource="{Binding Children}"/>
</DataTemplate>
</Menu.ItemTemplate>
</Menu>
数据集合在标题上工作。但是我无法显示Children节点。
public void CreateTempMenuList()
{
MenuCollection = new ObservableCollection<MenuItem>()
{
new MenuItem()
{
Header = "File",
Children = new ObservableCollection<MenuItem>()
{
new MenuItem()
{
Header = "Exit"
}
}
}
};
}
MenuItem
类是我创建的。每个属性都有一个调用OnPropertiesChanged
函数的setter。如果需要,我可以添加该类,但我很确定这不是问题。
所以我的问题是。我如何摆脱'double' hover
。在图片中,您可以看到2 borders
。我悬停在outer border
上方。悬停一直持续到专注于别的东西。
我的第二个问题是我怎样才能让儿童用品上班? itemssource
标签上的menuitem
可能是错误的,但我想到的就是它。
答案 0 :(得分:1)
定义HierarchicalDataTemplate
:
<Menu ItemsSource="{Binding Data.MenuCollection}">
<Menu.Resources>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{Binding Command}" />
</Style>
</Menu.Resources>
<Menu.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Header}" />
</HierarchicalDataTemplate>
</Menu.ItemTemplate>
</Menu>
为每个项隐式创建System.Windows.Controls.MenuItem
容器,因此您不应在模板中添加另一个MenuItem
元素。
另请确保您不绑定ObservableCollection<System.Windows.Controls.MenuItem>
,因为ItemTemplate
不会应用于内置MenuItem
元素。
答案 1 :(得分:0)
要使当前代码生效,请右键单击Menu control > Edit Additional Template > Edit ItemContainerStyle > Edit Copy
。
在生成的Style中,
搜索这段代码:
<Trigger Property="Role" Value="TopLevelItem">
<Setter Property="Padding" Value="7,2,8,3"/>
<Setter Property="Template" Value="{DynamicResource {ComponentResourceKey ResourceId=TopLevelItemTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}}"/>
</Trigger>
将Padding
更改为0
而不是7,2,8,3
。