通过样式设置器设置菜单项图标

5
<Style x:Key="ContextMenuItemStyle" TargetType="{x:Type MenuItem}">
    <Setter Property="Icon" Value="{Binding Icon}" />
    <Setter Property="Header" Value="{Binding Text}" />
    <Setter Property="ItemsSource" Value="{Binding Children}" />
    <Setter Property="Command" Value="{Binding Command}" />
</Style>

在代码中设置它就像这样:

Uri refreshUri = new Uri("..\\Resources\\Refresh16.bmp",UriKind.Relative);
BitmapImage refreshIcon = new BitmapImage();
refreshIcon.UriSource = refreshUri;

图标没有显示出来,有什么线索吗?
2个回答

8
如果refreshIcon是您的Icon属性的来源,则在您的代码示例之后调用NotifyPropertyChanged("Icon")(并实现INotifyPropertyChanged接口)和/或将Icon声明为DependencyProperty可能是必要的。
这里有一个关于INotifyPropertyChanged接口的更多信息的链接。
啊,我明白了你的问题...尝试将Icon属性设置为一个Image并绑定到Image的源。
<Setter Property="Icon">
    <Setter.Value>
        <Image Source="{Binding Icon}" />
    </Setter.Value>
</Setter>

您也可以将图像放入主项目的Images文件夹中,并在xaml中引用它,如下所示:
<Setter Property="Icon">
    <Setter.Value>
        <Image Source="/ProjectName;component/Images/IconName.ico" />
    </Setter.Value>
</Setter>

2
我的上下文菜单显示如下内容: [System.Windows.media.Imaging.BitmapImage 刷新] - Pacman

7

如果还有人在寻找解决方案,这个对我有效:

<Window.Resources>
    <Image x:Key="Icon" Source="/ProjectName;component/Images/IconName.ico" x:Shared="false"/>
    <Style x:Key="MenuItem">
        <Setter Property="MenuItem.Header" Value="Header Text"/>
        <Setter Property="MenuItem.Icon" Value="{DynamicResource Icon}"/>
    </Style>
</Window.Resources>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接