在WPF中消失的图标

时间:2009-03-26 02:30:06

标签: wpf resources png

我希望在我的WPF应用程序中使用VS2008ImageLibrary / Actions / pngformat中的一些图标来获得更多Visual Studio外观 - 就像WinForms中的“插入标准项”命令一样。
我已将图像添加为资源,并在我的xaml文件中引用它们:

<DockPanel.Resources>
        <Image x:Key="NewIcon" Source="Toolbar Images/NewDocumentHS.png" Height="16" Width="16"/>
</DockPanel.Resources>

然后我将图片添加到菜单和工具栏

<MenuItem Command="ApplicationCommands.New" Icon="{StaticResource NewIcon}"/>
<!-- ... -->
<Button Command="ApplicationCommands.Save"><StaticResourceExtension ResourceKey="SaveIcon"/></Button>

然而,当我打开菜单时,图标从工具栏中消失,好像按钮从未出现过。我在其他地方读过这样的事情是由于.NET缺乏对Vista图标/压缩PNG的支持而发生的,但我不确定这是完全相同的问题。我试图通过改变格式来解决这个问题已经失败,或者给出了次优结果(例如失去透明度)。 有谁知道更好的方法吗?

编辑: 对于遇到此问题的其他人,请使用&lt;中的不同键创建重复条目。 DockPanel.Resources&gt;每个引用的标记似乎是一个功能足够的解决方法,但我担心如果它们因任何原因需要重新加载,图像可能会再次消失。

2 个答案:

答案 0 :(得分:3)

我认为您必须使用Button定义一个单独的资源:

    <DockPanel.Resources>
        <Image x:Key="NewIconForMenu" Source="Toolbar Images/NewDocumentHS.png" Height="16" Width="16"/>
<Image x:Key="NewIconForButton" Source="Toolbar Images/NewDocumentHS.png" Height="16" Width="16"/>
</DockPanel.Resources>

我想,当你声明一个Image资源时,它基本上是创建Image类型的对象。之后,通过设置Icon和Content属性,使其成为MenuItem和Button的子项,因此它不再是树。这是不合法的。

如果您尝试声明也使用NewIcon的第二个按钮,您将获得逻辑树的例外。

我不知道MenuItem如何转义该异常,在将图像添加到自己的逻辑子集合之前,可能是聪明的从Button的子节点中移除Image元素(这就是它消失的方式)。

好的,我刚刚找到了一个更简单的解决方案。您可以将x:Shared =“false”添加到字典中的图像声明。这将确保创建该图像的新实例,并且不会破坏wpf树规则。

答案 1 :(得分:1)

使用失去透明度的格式并将透明度键设置为该背景颜色。