.net - 无法使用ItemContainerStyle设置菜单项的图标

标签 .net wpf xaml menuitem itemcontainerstyle

我正在尝试像这样设置菜单项的图标-

 <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

任何人都可以提供此行为的原因以及可能的解决方案/解决方法。

最佳答案

这是因为您在资源中使用了ImageImage是一个控件,并且像其他任何控件一样,只能有一个父级。默认情况下,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/

相关文章:

C# 使用 EPPLUS 更改 Excel 图表轴格式

c# - 部署 IE9 扩展

.net - 是否可以共享 DataTrigger?

c# - 如何在子类中覆盖 .NET Framework 类的属性?

c# - .Net 消息发布/订阅模式

c# - Kinect v2 手到鼠标的位置在手关闭时下降

c# - 等待动画在MVVM中完成的最佳方法是什么?

wpf - MVVM 中具有依赖属性的用户控件

c# - Windows Phone 导航到同一页面的新实例

c# - 如何在 MarkupExtension 的设计时获取静态资源值?