无法访问放置在WPF应用程序另一个程序集中的资源(图像)

3

我有一个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页面中访问该图像?


2
构建操作必须设置为“资源”。然后重新构建所有内容。 - Clemens
@Clemens:当我将构建操作设置为资源时,我无法在dll中看到我的图像。我在hex编辑器中打开了dll并搜索了but_close.png,但找不到它。 - mans
@mans 没问题。另外,你的项目 Library.WPF.Resources 中有名为 Resources 的文件夹吗? - user3449857
@Clemens:是的,我有,但我正在使用打包URI来指向我的库程序集中的资源。 - mans
@Clemens:我把资源项目中的图像目录移动到了根目录,所以打包URI为:"pack://application:,,,/Library.WPF.Resources;component/Images/but_close.png",但是我发现无法找到images/but_close.png。 - mans
1个回答

0

将构建操作设置为“资源”。

确保资源访问修饰符为“public”

像这样访问资源:

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

我该如何将资源访问修饰符设置为public? - mans
右键单击项目。点击“属性”。 在资源选项卡中,您会发现几个下拉框,如“添加资源”,还有“访问修饰符”。 - Ketobomb
你尝试过这个解决方案吗? - Ketobomb
是的,我测试过了,但它没有起作用。属性页面中的资源是窗体属性而不是WPF。 - mans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接