为什么只有最后一个菜单项有图标?
为什么只有最后一个菜单项有图标?
在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") });
CopyImage
在我的应用程序资源中定义。
运行时,只有最后一个菜单项显示图标。其余三个菜单项则不显示。
有人能解释一下这种行为吗?
admin 更改状态以发布 2023年5月21日
每个UI元素只能在可视树中的一个位置放置。你不能在多个菜单项上使用同一个图像控件。你需要为每个菜单项创建单独的图像控件。否则,每次将它分配给新的菜单项时,你只是将其从一个位置移动到另一个位置。 \n
var contextMenu = new ContextMenu(); contextMenu.Items.Add(new MenuItem { Header = "Copy All", Icon = FindResource("CopyImage1") }); contextMenu.Items.Add(new MenuItem { Header = "Copy All with Headers", Icon = FindResource("CopyImage2") }); contextMenu.Items.Add(new MenuItem { Header = "Copy Selected", Icon = FindResource("CopyImage3") }); contextMenu.Items.Add(new MenuItem { Header = "Copy Selected with Headers", Icon = FindResource("CopyImage4") });
看看这篇文章。
它解释了一个图像只能在一个地方使用。这就解释了为什么它只出现在你最近在代码中设置的分配上。 相反,定义一个BitmapImage,然后为每个菜单项创建一个新的使用BitmapImage作为源的图像。
另一篇文章中指出:
为此,将BitmapSource创建为某个资源:
然后,在你的代码中使用类似以下代码: