【问题标题】:Set resource URI of .xaml component设置 .xaml 组件的资源 URI
【发布时间】:2016-01-28 07:03:07
【问题描述】:

我有一个名为 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"?

我想这样做的原因描述为here

在下图中你可以看到我说的资源标识符:

其中:

【问题讨论】:

标签: wpf xaml resources uri


【解决方案1】:

请注意,that question 是此问题的来源,可能有助于了解其背景。

在这个问题上苦苦挣扎了一周后,我终于找到了问题的原因和解决方案。

问题在于自动生成的*.g.i.cs 文件,该文件由UserControlInitializeComponent() 方法调用,如下所示:

此文件生成一个字符串(一个资源定位器),表示该 xaml 组件的路径,如下所示:

现在,如果您有同一个程序集的多个版本并且两个版本都包含相同的 xaml 文件,WPF 不知道要实例化哪个 xaml 文件,因为资源定位器只引用程序集的名称,而不是它的版本。

这导致TargetInvocationException,表示

{"组件 'MyNamespace.MyUserControl' 没有由 URI '/MyAssembly;comoponent/myusercontrol.xaml' 标识的资源"}

如下:

对此的简单(但绝对不明显)解决方案是将程序集的版本添加到此资源定位器。这可以通过添加<AssemblyVersion>-tag 来修改项目的构建文件来实现,如下所示:

此致谢:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2017-08-24
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多