【发布时间】:2010-09-16 21:04:22
【问题描述】:
考虑一个文件 |包含以下内容的 WPF 应用程序的新项目:
- 名为 CustomControl1 的新自定义控件
- 两个名为 Dictionary1 和 Dictionary2 的新资源字典
从 Generic.xaml 中取出生成的样式并将其移至 Dictionary2。然后将 Dictionary2 合并到 Dictionary1 中,将 Dictionary1 合并到 Generic 中,如下所示:
<!--Generic.xaml-->
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Themes/Dictionary1.xaml"/>
</ResourceDictionary.MergedDictionaries>
<!--Dictionary1.xaml-->
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary2.xaml"/>
</ResourceDictionary.MergedDictionaries>
然后,将 CustomControl1 的一个实例添加到 MainWindow 的网格中。 (这部分是重现问题所必需的。项目始终编译良好 - 只有在运行时才会出现问题,并且必须引用字典。)
在 Dictionary1.xaml 中,我将合并到同一文件夹中的另一个 dict 中,因此一个简单的 Source="Dictionary2.xaml" 可以工作。然而在 Generic.xaml 中,我必须使用绝对 URI。如果我将上面的内容更改为 Source="Dictionary1.xaml" 而没有 pack://application 的东西,那么当它尝试构造 MainWindow 时,我会得到一个由 IOException "Cannot locate resource 'dictionary1.xaml'" 引起的 XamlParseException。
我的问题: generic.xaml 在相对 URI 解析方面有什么特别之处,为什么?
【问题讨论】: