wpf - 菜单打开时,XAML ResourceDictionary中的图像在工具栏上消失

标签 wpf resourcedictionary

我已经开始将各种常见的Image移到ResourceDictionary中,并且注意到我的WPF应用程序中的行为异常。如果在ImageMenuItemButton中使用了ToolBar,则当我打开Menu时,图像会在Button上消失。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Image x:Key="NewImage"
           Source="/SomeApplication;component/Resources/NewDocumentHS.png"
           Stretch="None"/>
    <!-- ... -->
Window中的相关XAML:
<Menu>
    <MenuItem Header="_File">
        <MenuItem Header="_New"
                  Command="{Binding NewCommand}"
                  Icon="{DynamicResource NewImage}" />
<!-- ... -->
<ToolBarTray>
    <ToolBar>
        <Button Command="{Binding NewCommand}"
                Content="{DynamicResource NewImage}" />

我认为这是对ResourceDictionary中资源的警告,但是我无法为此找到合适的解决方案。 StaticResourceDynamicResource都会发生行为。 ResourceDictionary是独立存在的还是与其他人合并的,似乎也不会受到影响。也没有其他资源共享该 key 。

编辑:此外,向图像添加PresentationOptions:Freeze="True"不会改变这种情况。

最佳答案

Image类是一种视觉,因此它只能出现在视觉树中的一个位置。因此,您不能在多个MenuItems/Buttons/etc之间共享它。

不过,您可以共享ImageSource(即Image.Source)值。

在WPF中,我相信您可以使用x:Shared =“False”强制WPF为每个请求创建一个新实例。

关于wpf - 菜单打开时,XAML ResourceDictionary中的图像在工具栏上消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5597554/

相关文章:

wpf - 访问 DataTemplate 内的元素...如何访问超过 1 个 DataTemplate?

wpf - WPF TextBlock 元素和 Label 控件有什么区别?

wpf - 如何在 WPF ItemsControl 中保留项目的排序顺序?

c# - 将形状映射到另一个按钮

wpf - 公共(public)与私有(private)附加属性

WPF创建样式而不覆盖默认样式

c# - x :Type not found in user control library

wpf - 将 WPF 路径转换为位图文件

c# - 如何在运行时使用资源字典更改 UI 语言?

c# - WPF VS2013 : An error occurred while finding the resource dictionary