考虑一个文件 | 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“无法定位资源 'dictionary1.xaml'”引起的 XamlParseException。
我的问题: generic.xaml 关于相对 URI 解析有什么特别之处,为什么?