【问题标题】:Unable to access resources (images) placed in another assembly in wpf application无法访问放置在 wpf 应用程序中的另一个程序集中的资源(图像)
【发布时间】:2014-04-02 10:35:31
【问题描述】:

我有一个 WPF 项目,该项目有一个链接到另一个程序集,其中只有一些资源(即图像和样式)。此程序集的名称是 Library.WPF.Resources

我无法访问资源程序集中的图像。

在资源集合中,我包含了一张名为 but_close.png 的图像,并将其属性设置为

build action= content
copy to output directory = don't copy

在 wpf 应用程序中,我使用此图像如下

<Button  Canvas.Left="997" Canvas.Top="10" Width="16" Height="14" Style="{StaticResource TransparentButton}" x:Name="CloseWindow">
            <Image  >
                <Image.Style>
                    <Style TargetType="{x:Type Image}">
                        <Setter Property="Source" Value="pack://application:,,,/Library.WPF.Resources;component/Resources/Images/but_close.png"/>
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Source"  Value="/Library.WPF.Resources;component/Resources/Images/but_close_roll.png"/>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Image.Style>
            </Image>
        </Button

当我在 wpf 应用程序上查看包含此按钮的页面时,我看不到任何问题(没有错误表明应用程序找不到它。但是当我运行应用程序时,我收到此错误:

{"Cannot locate resource 'resources/images/but_close.png'."}

我在十六进制编辑器中打开了 Library.WPF.Resources.dll 并查找了 but_close.png,但我在 dll 中找不到它。

为什么图片不包含在dll中?

我将资源项目中 but_close.png 的构建操作更改为资源。同样的问题,它不包含在dll中。

将此图像的构建操作更改为嵌入式资源。现在它在 dll 中,但是当我运行应用程序时,仍然出现找不到资源的错误。

我的问题:

1- 资源程序集中的图像的正确构建操作是什么?

2- 为什么我可以访问另一个 xaml 页面中的图像?

【问题讨论】:

  • 构建操作必须设置为Resource。然后重建一切。
  • @Clemens:当我将构建操作设置为资源时,我无法在 dll 中看到我的图像。我在十六进制编辑器中打开 dll 并查找 but_close.png,但找不到。
  • @mans 没关系。此外,您在项目 Library.WPF.Resources 中有文件夹 Resources
  • @Clemens:是的,我有,但我使用 pack uri 指向库程序集中的资源。
  • @Clemens:我将资源项目中的图像目录移至根目录,因此包 uri 为:“pack://application:,,,/Library.WPF.Resources;component/Images/but_close .png”,我得到的 images/but_close.png 找不到。

标签: c# .net wpf xaml dll


【解决方案1】:

将构建操作设置为“资源”。 确保资源访问修饰符是“public”

像这样访问资源:

<Grid>
    <Image Source ="pack://application:,,,/Library.WPF;component/Resources/but_close.png" Stretch="Fill"/>
</Grid>

【讨论】:

  • 如何将资源访问修饰符设置为 public?
  • 右键项目。点击“属性”。在“资源”选项卡中,您会找到几个组合框,例如“添加资源”以及“访问修饰符”
  • 你试过这个解决方案了吗?
  • 是的,我确实测试过它,但它不起作用。属性页中的资源是windoform属性,不是wpf。
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 2016-06-02
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多