我有一个包含以下两个菜单项的菜单:
<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>对象,如下所示:
ItemsSource="{Binding Path=SomeMenu}"我的MenuItem类有"String“和ImageSource Icon字段,我想将它们绑定到菜单项的标题和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>但我不明白如何分别定义标头和Icon模板。
我该怎么做呢?
更新:,我希望<cc:Icon>出现在任何地方,在menuItem模板中有一个<contentPresenter Source="Icon">,而textBox在任何地方都有一个<contentPresenter Source="Header">
发布于 2017-12-31 11:13:03
我相信这就是你想要的:
<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>还是我又不幸地失败了?
https://stackoverflow.com/questions/48037670
复制相似问题