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的主要内容,如果未能解决你的问题,请参考以下文章

如何启用/禁用和/或显示/隐藏 GWT MenuItem

如何在 Select 和 MenuItem 中保留已选择的值?

menuitem和contextmenu crossbrowser兼容性

如何将菜单和menuitem角色的默认JAWS读取更改为自定义角色?

jpopupmenu menuitem actionperformed未触发

Android给一个menuItem添加子菜单,addSubMenu()在哪里?