我正在尝试像这样设置菜单项的图标-
<Grid>
<Grid.Resources>
<Image
x:Key="ReportIconImage" Height="20" Width="20"
Source="/Resource/flag.png"/>
<Image
x:Key="ReportIconImage1" Height="20" Width="20"
Source="/Resource/flag.png"/>
</Grid.Resources>
<Menu Height="22" Margin="0,9,0,0" Name="menu1" VerticalAlignment="Top">
<MenuItem Header="Menu">
<MenuItem Header="Save" ></MenuItem>
<MenuItem Header="Open"/>
<MenuItem Header="Exit"/>
<MenuItem.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter
Property="Icon"
Value="{StaticResource ReportIconImage}">
</Setter>
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
<MenuItem Header="Edit">
<MenuItem Header="Undo"/>
<MenuItem Header="Redo"/>
<Separator/>
<MenuItem Header="Cut"/>
<MenuItem Header="Copy"/>
<MenuItem Header="Paste"/>
<MenuItem.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter
Property="Icon"
Value="{StaticResource ReportIconImage1}">
</Setter>
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
</Menu>
</Grid>
但是仅显示最后一个菜单项的图标,而不显示前两个菜单项的图标。
样例应用程序-http://weblogs.asp.net/blogs/akjoshi/Samples/WPFMenuItemBugSample.zip
任何人都可以提供此行为的原因以及可能的解决方案/解决方法。
最佳答案
这是因为您在资源中使用了Image
。 Image
是一个控件,并且像其他任何控件一样,只能有一个父级。默认情况下,WPF将尝试在所有使用者之间共享资源。因此,最后的MenuItem
“赢得”了Image
和其他MenuItem
的保管权,甚至不允许周末参观。
要解决此问题,您可以将Image
设置为非共享:
<Image x:Shared="False" .../>
或者,更好的是,将图像资源显示为适当的
ImageSource
子类,并共享它:<BitmapImage x:Key="ReportIconImage" Uri="/Resource/flag.png"/>
...
<Setter Property="Icon">
<Setter.Value>
<Image Source="{StaticResource ReportIconImage}"/>
</Setter.Value>
</Setter>
关于.net - 无法使用ItemContainerStyle设置菜单项的图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6464902/