我有MenuItem
,如下所示
<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>
然后我得到了像
这样的东西
如何重复使用图标?
答案 0 :(得分:8)
请参阅this问题
图像只能有一个父级,因此它将从第一个MenuItem移动到第二个。您可以像这样添加x:Shared属性
<Window.Resources>
<Image x:Key="CopyIcon" x:Shared="False" Source="..." />
</Window.Resources>
来自msdn
x:共享属性
设置为false时,修改WPF 资源检索行为,以便 请求归属资源 为每个请求创建一个新实例 而不是共享相同的实例 对于所有请求。
答案 1 :(得分:4)
您最有可能在资源中将 CopyIcon 声明为图像类型,如下所示:
<Window.Resources>
<Image x:Key="CopyIcon" Source="yourcopyicon.ico"/>
</Window.Resources>
因此,问题的根本原因是, Image 是一个可视元素,因为它派生自 FrameworkElement (这是一个可视元素),而视觉元素不能同时拥有多个父级。这就是为什么第一个MenuItem没有显示图标,因为第二个MenuItem 重置了CopyIcon的父,使其自己成为CopyIcon的父级。
希望这个解释对你有所帮助。现在按照 Meleak 在回复中所说的内容进行操作。 : - )
答案 2 :(得分:1)
尝试以下方法:
<MenuItem Header=“Paste“ >
<MenuItem.Icon><Image Height=“16“ Width=“16“ Source=“paste.jpg“ /></MenuItem.Icon>
</MenuItem>