我有一个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>
Run Code Online (Sandbox Code Playgroud)
注意前两个项目使用相同的图标,我得到类似下面的内容

我尝试删除第二项,
<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>
Run Code Online (Sandbox Code Playgroud)
然后我得到了类似的东西

我该如何重用图标?
看到这个问题
图像只能有一个父级,因此它将从第一个MenuItem移动到第二个MenuItem.您可以像这样添加x:Shared属性
<Window.Resources>
<Image x:Key="CopyIcon" x:Shared="False" Source="..." />
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
来自msdn
x:共享属性
设置为false时,修改WPF资源检索行为,以便对属性资源的请求为每个请求创建新实例,而不是为所有请求共享同一实例.
您很可能在资源中将CopyIcon声明为 Image 类型,如下所示:
<Window.Resources>
<Image x:Key="CopyIcon" Source="yourcopyicon.ico"/>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
所以,问题的根本原因是,Image是一种视觉元素,因为它派生自FrameworkElement(它是一种视觉元素),而视觉元素不能同时拥有多个父元素。这就是为什么第一个 MenuItem 不显示图标,因为第二个 MenuItem重置了 CopyIcon 的父级,使其成为 CopyIcon 的父级。
希望这个解释对您有所帮助。现在请听听梅莱克在回应中所说的话。:-)
| 归档时间: |
|
| 查看次数: |
1013 次 |
| 最近记录: |