WPF - 使用数据模板的MenuItem图标

时间:2013-08-03 18:46:08

标签: wpf datatemplate menuitem

我有一个menuitem,其中itemsource设置为不同类型的集合。对于每种类型,我在资源部分中定义了一个datatemplate。

如何根据数据类型设置menuItems图标?

编辑:虽然Brian建议的想法可行,但我不希望viewmodel指定图像资源本身,而是要打开View的标签,所以接下来就是这样。

<Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource {x:Type MenuItem}}">
            <Setter Property="Command" Value="{Binding Process}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Usage}" Value="UsageA">
                    <Setter Property="Icon" Value="{StaticResource imgA}"/>
                </DataTrigger>

                <DataTrigger Binding="{Binding Usage}" Value="UsageB">
                    <Setter Property="Icon" Value="{StaticResource imgB}"/>
                </DataTrigger>

                <DataTrigger Binding="{Binding Usage}" Value="UsageC">
                    <Setter Property="Icon" Value="{StaticResource imgC}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>

1 个答案:

答案 0 :(得分:1)

您必须为Style的{​​{1}}创建MenuItem。在样式中,您可以将ItemContainerStyle的{​​{1}}绑定到对象上的属性。它看起来像这样:

Icon

您也可以使用水平MenuItem<Style x:Key="MyMenuItemStyle" TargetType="MenuItem"> <Setter Property="Header" Value="{Binding MenuName}"/> <Setter Property="Command" Value="{Binding MenuCommand}"/> <Setter Property="Icon" Value="{Binding MenuIcon}" /> </Style> 中执行此操作,只显示图片和菜单的文字,但这不会真正使用{{1} } DataTemplate的属性,只是将图片添加到StackPanel的{​​{1}}。

Icon定义了MenuItem的容器,并允许您分配Content的{​​{1}}属性。