wpf - 枚举嵌入资源目录中的文件

标签 wpf resources enumerate

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

最佳答案

资源被编译成一个名为 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.xaml 的文件夹下有一堆资源字典。 , Themes/Theme2.xaml等。这些将作为 Themes/Theme1.baml 编译到您的程序集中。 , Themes/Theme2.baml , 等等。

关于wpf - 枚举嵌入资源目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5069276/

相关文章:

c# - 当发生某些 WPF 数据绑定(bind)更新时,有什么方法可以获取事件?

sql-server - SQL Server Analysis Services 和 OLAP 开发人员指南

枚举的Python奇怪行为

WPF Square 自动调整父容器的大小

WPF 旋转文本

android - WebView,将本地 .CSS 文件添加到 HTML 页面?

c++ - MFC项目中使用多个资源文件

python - 对于数组中的每个点,在第二个数组中找到最接近它的点并输出该索引

python - 如何在python中将标称数据转换为数值?

c# - 我可以同时使用 PropertyChanged 和 LostFocus 吗?