首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MenuItem.Header和MenuItem.Icon DataTemplate

MenuItem.Header和MenuItem.Icon DataTemplate
EN

Stack Overflow用户
提问于 2017-12-30 20:36:36
回答 1查看 961关注 0票数 1

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

代码语言:javascript
复制
<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>

如您所见,每个项目都有一个名称作为“头”,一个图标(我自己的控件)作为一个“图标”。

我不想在XAML中显式地编写它们,而是将ItemsSource绑定到我的ViewModel中的List<MenuItem>对象,如下所示:

代码语言:javascript
复制
ItemsSource="{Binding Path=SomeMenu}"

我的MenuItem类有"String“和ImageSource Icon字段,我想将它们绑定到菜单项的标题和Icon部分,这正是我在这里所做的。

我认为正确的方法是使用DataTemplate,如下所示:

代码语言:javascript
复制
<Menu.ItemTemplate>
  <DataTemplate>
    <!-- TODO: Bind the Header and Icon properties-->
    <TextBlock Text="{Binding Path=Name}"/>
    <!-- how to bind the icon? -->
  </DataTemplate>
<Menu.ItemTemplate>

但我不明白如何分别定义标头和Icon模板。

我该怎么做呢?

更新:,我希望<cc:Icon>出现在任何地方,在menuItem模板中有一个<contentPresenter Source="Icon">,而textBox在任何地方都有一个<contentPresenter Source="Header">

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-31 11:13:03

我相信这就是你想要的:

代码语言:javascript
复制
<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>

还是我又不幸地失败了?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48037670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档