MenuItem.Header和MenuItem.Icon DataTemplate

问题描述 投票:1回答:1

我有一个包含以下两个菜单项的菜单:

<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">

wpf xaml menu menuitem
1个回答
1
投票

我相信这就是你想要的:

<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>

还是我又悲惨地失败了? :)

© www.soinside.com 2019 - 2024. All rights reserved.