为什么只有最后一个菜单项有图标?

113 浏览
0 Comments

为什么只有最后一个菜单项有图标?

在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在我的应用程序资源中定义。


运行时,只有最后一个菜单项显示图标。其余三个菜单项则不显示。

\"enter

有人能解释一下这种行为吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

每个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") });

0
0 Comments

看看这篇文章

它解释了一个图像只能在一个地方使用。这就解释了为什么它只出现在你最近在代码中设置的分配上。 相反,定义一个BitmapImage,然后为每个菜单项创建一个新的使用BitmapImage作为源的图像。

另一篇文章中指出:

为此,将BitmapSource创建为某个资源:


然后,在你的代码中使用类似以下代码:


0