【问题标题】:Enumerating files in an embedded resource directory枚举嵌入资源目录中的文件
【发布时间】:2011-07-01 10:55:15
【问题描述】:

有没有办法在 WPF 中枚举特定嵌入资源目录中的所有文件?也就是说,所有项目的目录都将“构建操作”设置为“资源”。

【问题讨论】:

    标签: wpf resources enumerate


    【解决方案1】:

    资源被编译成一个名为YourAssemblyName.g.resources 的资源流。所以,我们加载这个流,它看起来是一个字典,其中键是资源名称,值是资源数据。我们对资源名称感兴趣,因为它(通常)是资源的原始文件夹和文件名。然后我们过滤掉那些以我们感兴趣的文件夹开头的键。

    public static string[] GetResourcesUnder(string folder)
    {
        folder = folder.ToLower() + "/";
    
        var assembly       = Assembly.GetCallingAssembly();
        var resourcesName  = assembly.GetName().Name + ".g.resources";
        var stream         = assembly.GetManifestResourceStream(resourcesName);
        var resourceReader = new ResourceReader(stream);
    
        var resources =
            from p in resourceReader.OfType<DictionaryEntry>()
            let theme = (string)p.Key
            where theme.StartsWith(folder)
            select theme.Substring(folder.Length);
    
        return resources.ToArray();
    }
    

    LINQ 查询过滤掉所有以给定文件夹名称开头的资源键,并从键中删除文件夹名称。

    您需要知道的一件事是 XAML 文件被编译并被赋予了 BAML 扩展名。因此,假设您在名为Themes/Theme1.xamlThemes/Theme2.xaml 等的文件夹下有一堆资源字典。这些将作为Themes/Theme1.bamlThemes/Theme2.baml 等编译到您的程序集中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      相关资源
      最近更新 更多