设置 .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 文件中,该文件由 UserControlInitializeComponent() 方法调用,如下所示:

此文件生成一个字符串(资源定位器),表示 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 修改项目的构建文件来实现,如下所示:

致谢名单: