当我将 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。
所以我构建了一个 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。