在文件夹中搜索和列出WPF资源字典

Jip*_*ers 4 wpf search list resourcedictionary

我正在制作一个WPF应用程序,它将由我们的构建系统标记多个皮肤.理想情况下,我们希望应用程序列出可用的皮肤,因为一些构建将具有一对多皮肤.

在运行时有没有办法枚举特定文件夹中的所有资源字典?

我想避免在我的代码隐藏中对XAML文件名进行硬编码,因为这是一种变化的情况.

Ray*_*rns 7

有点.

您可以枚举所有BAML(已编译的XAML)文件,如下所示:

  var resourcesName = assembly.GetName().Name + ".g";
  var manager = new System.Resources.ResourceManager(resourcesName, assembly);
  var resourceSet = manager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
  var allXamlFiles =
    from entry in resourceSet.OfType<DictionaryEntry>()
    let fileName = (string)entry.Key
    where fileName.EndsWith(".baml")
    select fileName.Substring(0, fileName.Length-5) + ".xaml";
Run Code Online (Sandbox Code Playgroud)

没有办法知道哪些是ResourceDictionaries,哪些是其他XAML,如Windows或UserControls而没有实际加载它们.所以你直接问题的答案是"不",除非你加载你发现的每个XAML来检查它是否是一个ResourceDictionary.这将非常缓慢.

另一方面,如果您愿意为ResourceDictionaries使用命名方案,那么您可以枚举程序集中的所有BAML并选择与您的命名方案匹配的任何BAML,并相信它们是ResourceDictionaries.只需在上面的查询中扩展"where"子句即可.

因此答案是"有点".