设置 .xaml 组件的资源 URI
Set resource URI of .xaml component
我有一个名为 MyUserControl.xaml 的 .xaml 用户控件,我想设置它的资源 URI。
默认情况下,WPF 生成一个包含资源名称的 URI,该名称等于它所属的资源,例如
"/MyNamespace;component/myusercontrol.xaml"
对于名为 MyUserControl.xaml
的 .xaml
我怎样才能拥有一个 UserControl MyUserControl.xaml
并使 WPF 生成一个单独的资源标识,例如
"/MyNamespace;component/myusercontrol_A.xaml"
或
"/MyNamespace;component/myusercontrol_B.xaml"
?
我想这样做的原因已描述 。
在下图中你可以看到我说的资源标识符:
其中:
请注意, 是此问题的来源,可能有助于理解其背景。
经过一个星期的折腾和折腾,我终于找到了问题的原因和解决方法。
问题出在自动生成的 *.g.i.cs
文件中,该文件由 UserControl
的 InitializeComponent()
方法调用,如下所示:
此文件生成一个字符串(资源定位器),表示 xaml 组件的路径,如下所示:
现在,如果您有 同一程序集的多个版本 并且两个版本都包含相同的 xaml 文件,WPF 不知道要实例化什么 xaml-file,因为资源定位器只引用程序集的名称而不是它的版本。
这导致 TargetInvocationException
,表示
{"The component 'MyNamespace.MyUserControl' does not have a resource identified by the URI '/MyAssembly;comoponent/myusercontrol.xaml'"}
如下:
对此的简单(但绝对不是显而易见的)解决方案是将程序集的版本添加到此资源定位器。这可以通过添加 <AssemblyVersion>
-tag 修改项目的构建文件来实现,如下所示:
致谢名单:
- this blog
- this SO thread
我有一个名为 MyUserControl.xaml 的 .xaml 用户控件,我想设置它的资源 URI。
默认情况下,WPF 生成一个包含资源名称的 URI,该名称等于它所属的资源,例如
"/MyNamespace;component/myusercontrol.xaml"
对于名为 MyUserControl.xaml
我怎样才能拥有一个 UserControl MyUserControl.xaml
并使 WPF 生成一个单独的资源标识,例如
"/MyNamespace;component/myusercontrol_A.xaml"
或
"/MyNamespace;component/myusercontrol_B.xaml"
?
我想这样做的原因已描述
在下图中你可以看到我说的资源标识符:
其中:
请注意,
经过一个星期的折腾和折腾,我终于找到了问题的原因和解决方法。
问题出在自动生成的 *.g.i.cs
文件中,该文件由 UserControl
的 InitializeComponent()
方法调用,如下所示:
此文件生成一个字符串(资源定位器),表示 xaml 组件的路径,如下所示:
现在,如果您有 同一程序集的多个版本 并且两个版本都包含相同的 xaml 文件,WPF 不知道要实例化什么 xaml-file,因为资源定位器只引用程序集的名称而不是它的版本。
这导致 TargetInvocationException
,表示
{"The component 'MyNamespace.MyUserControl' does not have a resource identified by the URI '/MyAssembly;comoponent/myusercontrol.xaml'"}
如下:
对此的简单(但绝对不是显而易见的)解决方案是将程序集的版本添加到此资源定位器。这可以通过添加 <AssemblyVersion>
-tag 修改项目的构建文件来实现,如下所示:
致谢名单:
- this blog
- this SO thread