当我将 WPF UserControl 用于其内置项目以外的项目时,我的 WPF UserControl 找不到资源

My WPF UserControl can't locate resources when I use it with a project other than the one it was built in

所以我构建了一个 WPF 用户控件作为更大解决方案的一部分。我正在构建另一个应用程序,这个用户控件可以很好地工作。我从新应用程序添加了对 DLL 的引用,将其连接并编译。 window 加载,我可以看到它告诉我找不到的图像。在主 window 显示并填充用户控件后,抛出异常说...

System.IO.IOException: 'Cannot locate resource 'resources/nosortnofilter.png'.'

用户控件是一个添加了一些扩展的DataGrid。它抛出的专栏是 "id"。正如您在图像中看到的,红色箭头显示 nosortnofilter.png 图像显示在所有列中。那么为什么会抛出这个异常呢?

它抛出的代码行在这里。

If ImageName = "" Then ImageName = "NoSortNoFilter"
img.Source = New BitmapImage(New Uri("pack://application:,,,/Resources/" & ImageName & ".png"))

所以从我的角度来看,这一切看起来都不错。希望有人能看到我没有看到的东西。

编辑:找到 solution。这行得通。但它仍然没有回答为什么原始 pack:// 格式的 URI 仅适用于原始解决方案的问题。

img.Source = New BitmapImage(New Uri($"Resources/{ImageName}.png", UriKind.Relative))

编辑:感谢 rfmodulator 为我提供正确的 DLL URI。

img.Source = New BitmapImage(New Uri("pack://application:,,,/AdvancedSortFilterDataGrid;component/Resources/" & ImageName & ".png"))

这是应用程序程序集中资源的 URI:

pack://application:,,,/Resources/[RESOURCENAME]

要获取 DLL 中的资源,URI 看起来更像这样:

pack://application:,,,/[DLLNAME];component/Resources/[RESOURCENAME]

详情见Pack URIs in WPF