在 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/