WPF で、特定の埋め込みリソース ディレクトリ内のすべてのファイルを列挙する方法はありますか? つまり、すべて「ビルド アクション」が「リソース」に設定されているアイテムのディレクトリです。
4836 次
1 に答える
15
リソースは、 という名前のリソース ストリームにコンパイルされ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 クエリは、指定されたフォルダー名で始まるすべてのリソース キーを除外し、キーからフォルダー名も削除します。
知っておく必要があることの 1 つは、XAML ファイルがコンパイルされ、拡張子 BAML が付けられることです。Themes/Theme1.xaml
、などの名前のフォルダーの下にリソース ディクショナリがたくさんあるとします。これらは、、、などThemes/Theme2.xaml
としてアセンブリにコンパイルされます。Themes/Theme1.baml
Themes/Theme2.baml
于 2011-03-03T19:22:55.763 に答える