在WPF中,我以编程方式向控件添加上下文菜单.
var contextMenu = new ContextMenu();
contextMenu.Items.Add(new MenuItem { Header = "Copy All", Icon = FindResource("CopyImage") });
contextMenu.Items.Add(new MenuItem { Header = "Copy All with Headers", Icon = FindResource("CopyImage") });
contextMenu.Items.Add(new MenuItem { Header = "Copy Selected", Icon = FindResource("CopyImage") });
contextMenu.Items.Add(new MenuItem { Header = "Copy Selected with Headers", Icon = FindResource("CopyImage") });
Run Code Online (Sandbox Code Playgroud)
CopyImage 在我的应用程序资源中定义.
<Image x:Key="CopyImage" Source="../Images/copy.png"/>
Run Code Online (Sandbox Code Playgroud)
在运行时,只有最后一个菜单项显示图标.其他三个菜单项没有.
有没有人对这种行为有解释?
看看这篇文章.
它解释了图像一次只能在一个地方使用.这可以解释为什么它最终只会出现在代码中的最新作业.相反,定义一个BitmapImage,然后使用BitmapImage作为每个菜单项的源创建一个新图像.
来自其他文章:
为此,在某处创建一个BitmapSource作为资源:
<BitmapImage x:Key="MyImageSource" UriSource="../Media/Image.png" />
Run Code Online (Sandbox Code Playgroud)
然后,在您的代码中,使用以下内容:
<Image Source="{StaticResource MyImageSource}" />
Run Code Online (Sandbox Code Playgroud)