提问者:小点点

为什么我不能对菜单中的多个项目使用相同的图标?


我有一个菜单项,如下所示

<MenuItem Header="Edit">
    <MenuItem Header="Copy Direct Link" Icon="{StaticResource CopyIcon}" Command="{Binding CopyImageCommand}" />
    <MenuItem Header="Copy Image Data" Icon="{StaticResource CopyIcon}" Command="{Binding CopyImageDataCommand}" />
    <MenuItem Header="Paste" Icon="{StaticResource PasteIcon}" Command="{Binding PasteImageCommand}" />
</MenuItem>

请注意,前两个项目使用相同的图标,我得到如下内容

我试着移除第二件物品,

<MenuItem Header="Edit">
    <MenuItem Header="Copy Direct Link" InputGestureText="Ctrl+C" Icon="{StaticResource CopyIcon}" Command="{Binding CopyImageCommand}" />
    <!--<MenuItem Header="Copy Image Data" InputGestureText="Ctrl+Alt+C" Icon="{StaticResource CopyIcon}" Command="{Binding CopyImageDataCommand}" />-->
    <MenuItem Header="Paste" InputGestureText="Ctrl+P" Icon="{StaticResource PasteIcon}" Command="{Binding PasteImageCommand}" />
</MenuItem>

然后我得到了一些东西

如何重用图标?


共3个答案

匿名用户

看这个问题

图像只能有一个父级,因此它将从第一个菜单项移动到第二个。你可以像这样添加x:共享属性

<Window.Resources>
    <Image x:Key="CopyIcon" x:Shared="False" Source="..." />
</Window.Resources>

来自msdn

x:共享属性
当设置为false时,修改WPF资源检索行为,以便对属性资源的请求为每个请求创建一个新实例,而不是为所有请求共享相同的实例。

匿名用户

您很可能在资源中将CopyIcon声明为图像类型,如下所示:

<Window.Resources>
  <Image x:Key="CopyIcon" Source="yourcopyicon.ico"/>
</Window.Resources>

因此,问题的根本原因是,图像是一个可视元素,因为它派生自FrameworkElement(它是一个可视元素),并且一个可视元素不能同时有多个父元素。这就是为什么第一个菜单项不显示图标,因为第二个菜单项重置了CopyIcon的父菜单项,使其自身成为CopyIcon的父菜单项。

希望这个解释对你有帮助。现在,按照梅莱克在回答中所说的去做。:-)

匿名用户

尝试以下方法:

<MenuItem Header=“Paste“ >
<MenuItem.Icon><Image Height=“16“ Width=“16“ Source=“paste.jpg“ /></MenuItem.Icon>
</MenuItem>