MenuItem.Header和MenuItem.Icon DataTemplate
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MenuItem.Header和MenuItem.Icon DataTemplate相关的知识,希望对你有一定的参考价值。
我有一个包含以下两个菜单项的菜单:
<MenuItem Header="Item1">
<MenuItem.Icon>
<cc:Icon ImageSource="..." Size="22"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Item2">
<MenuItem.Icon>
<cc:Icon ImageSource="..." Size="22"/>
</MenuItem.Icon>
</MenuItem>
正如您所看到的,每个Item都有一个名称作为“Header”,一个Icon(我自己的控件)作为一个“Icon”。
我没有在XAML中明确地写它们,而是想将ItemsSource
绑定到我的ViewModel中的List<MenuItem>
对象,如下所示:
ItemsSource="{Binding Path=SomeMenu}"
我的MenuItem
类有字段“String Name”和ImageSource Icon
,我想绑定到菜单项的Header和Icon
部分,这就是我在这里做的。
我认为正确的方法是使用DataTemplate
,如下所示:
<Menu.ItemTemplate>
<DataTemplate>
<!-- TODO: Bind the Header and Icon properties-->
<TextBlock Text="{Binding Path=Name}"/>
<!-- how to bind the icon? -->
</DataTemplate>
<Menu.ItemTemplate>
但我不明白如何分别定义Header和Icon
模板。
我怎么做到这一点,而不是?
更新:我希望<cc:Icon>
出现在menuItem模板中有一个<contentPresenter Source="Icon">
和textBox
出现有什么有<contentPresenter Source="Header">
答案
我相信这就是你想要的:
<Menu ItemsSource="{Binding SomeMenu}">
<Menu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Icon">
<Setter.Value>
<cc:Icon Source="{Binding Icon}"></Image>
</Setter.Value>
</Setter>
<Setter Property="Header" Value="{Binding Name}"/>
</Style>
</Menu.ItemContainerStyle>
</Menu>
还是我又悲惨地失败了? :)
以上是关于MenuItem.Header和MenuItem.Icon DataTemplate的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Select 和 MenuItem 中保留已选择的值?
menuitem和contextmenu crossbrowser兼容性
如何将菜单和menuitem角色的默认JAWS读取更改为自定义角色?