我正在使用松散的 XAML(构建操作无,但始终复制到输出目录)。我还有一个“根”xaml,它是一个资源字典,它引用了一些位于子文件夹中的合并字典。这是我的文件夹结构:
<root>\Root.xaml
<root>\SubFolder1\MergedDict1.xaml
<root>\SubFolder1\MergedDict2.xaml
<root>\SubFolder2\MergedDict3.xaml
<root>\SubFolder2\MergedDict4.xaml
我需要能够在不重新编译的情况下将其他 xaml 文件添加到文件夹中,这就是我需要使用松散 xamls 的原因。
在应用程序中,我加载了根 xaml,但总是得到无法找到合并字典的异常。我尝试了很多不同的变体来分配相对路径作为源。其中一些包括:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="<root>/SubFolder1/MergedDict1.xaml" />
<ResourceDictionary Source="/SubFolder1/MergedDict1.xaml" />
<ResourceDictionary Source="SubFolder1/MergedDict1.xaml" />
<ResourceDictionary Source="./SubFolder1/MergedDict1.xaml" />
<ResourceDictionary Source="../SubFolder1/MergedDict1.xaml" />
...
令我惊讶(和持续的恐惧)他们都没有奏效。
我开始质疑我的理智,所以我什至编写了一个小型测试应用程序来为我生成相对路径,使用 URI:
System.Uri uri2 = new Uri(@"C:\<root>\SubFolder1\MergedDict1.xaml");
System.Uri uri1 = new Uri(@"C:\<root>");
var r = uri1.MakeRelativeUri(uri2).ToString();
正如预期的那样,生成的相对路径是 SubFolder1/MergedDict1.xaml,也不起作用。谁能教我获得正确相对路径所涉及的黑魔法?