是否可以枚舉組件中定義的所有XAML資源?我知道如何獲取一個資源,如果你有它的密鑰可用,但在我的情況並非如此。編輯: 似乎我不夠清楚。我想列出在我知道完整路徑的大會外部大會中定義的XAML資源。如何獲取組件中定義的XAML資源列表?
回答
是的,你可以通過循環迭代資源。例如,使用foreach
循環:
foreach (var res in Application.Current.Resources)
{
Console.WriteLine(res);
}
更新:
從外部庫得到所有ResourceDictionary'ies
,你應該在第一,加載庫,然後得到ManifestResourceInfo
。讓我給個例子:
string address = @"WpfCustomControlLibrary.dll";
List<Stream> bamlStreams = new List<Stream>();
Assembly skinAssembly = Assembly.LoadFrom(address);
string[] resourceDictionaries = skinAssembly.GetManifestResourceNames();
foreach (string resourceName in resourceDictionaries)
{
ManifestResourceInfo info = skinAssembly.GetManifestResourceInfo(resourceName);
if (info.ResourceLocation != ResourceLocation.ContainedInAnotherAssembly)
{
Stream resourceStream = skinAssembly.GetManifestResourceStream(resourceName);
using (ResourceReader reader = new ResourceReader(resourceStream))
{
foreach (DictionaryEntry entry in reader)
{
//Here you can see all your ResourceDictionaries
//entry is your ResourceDictionary from assembly
}
}
}
}
你可以看到所有你ResourceDictionary
的在reader
。請參閱上面的代碼。
我測試過這段代碼,它工作。
試試下面的代碼:
ResourceDictionary dictionary = new ResourceDictionary();
dictionary.Source = new Uri("pack://application:,,,/WpfControlAssembly;Component/RD1.xaml", UriKind.Absolute);
foreach (var item in dictionary.Values)
{
//Operations
}
這裏WpfControlAssembly
是您的程序集的名稱。 Component
是固定值,然後RD1.xaml
是Resource Dictionary
。
下面是輸出:
資源字典
代碼輸出:
PS:全部ResourceDictionary
文件應該有Build Action
作爲'Resource'
或'Page'
。
更新:
最後我能做到這一點。請使用以下方法:
public ResourceDictionary GetResourceDictionary(string assemblyName)
{
Assembly asm = Assembly.LoadFrom(assemblyName);
Stream stream = asm.GetManifestResourceStream(asm.GetName().Name + ".g.resources");
using (ResourceReader reader = new ResourceReader(stream))
{
foreach (DictionaryEntry entry in reader)
{
var readStream = entry.Value as Stream;
Baml2006Reader bamlReader = new Baml2006Reader(readStream);
var loadedObject = System.Windows.Markup.XamlReader.Load(bamlReader);
if (loadedObject is ResourceDictionary)
{
return loadedObject as ResourceDictionary;
}
}
}
return null;
}
OUTPUT:
沒有預期
Exceptions
任何的try-catch &,我認爲更多的WPF(而不是將一切到ResourceDictionary
)的方式。
但是如果我不知道ResourceDictionary(RD1.xaml)的名稱會怎麼樣?是否有可能在程序集中找到所有ResourceDictionaries的名稱? – ionoy
如果您不知道ResourceDictionaries的名稱,可以從AssamblyInfo獲得該名稱,但是如果您不知道名稱,您將如何找到它們中的資源。我的意思是如果你不知道。資源詞典的名字,但知道它們的資源名稱似乎對我來說很諷刺。我不確定你想在這裏實現什麼。 –
@ionoy你對這個大會有什麼細節? –
- 1. 如何獲取在源文件中定義的列表功能
- 2. 獲取在struts config中定義的消息資源列表
- 3. XNA:獲取數組/資源列表?
- 4. 如何獲取鏈接到耶拿資源的資源列表?
- 5. 如何獲取列表中資源文件的名稱?
- 6. 如何獲取自定義列表框中組件的內容
- 7. 從資源中獲取圖像XAML
- 8. 如何在已有資源的WPF組件上設置XAML中的資源?
- 9. 獲取資源文本文件列表
- 10. 如何使用xaml資源字典中定義的樣式?
- 11. 如何更改xaml中已定義資源的值?
- 12. 在XAML中綁定資源
- 13. 如何獲取資源文件中所有資源的名稱
- 14. 如何從資源中獲取文件
- 15. 無法獲取列表中的資源組名稱
- 16. 如何從資源文件中獲取數組的數量?
- 17. 如何獲取資源列表中的所有圖像?
- 18. 如何使用XAML定義的畫筆資源,從C#
- 19. 如何獲取在arrays.xml中定義的所有數組列表?
- 20. 獲取資源文件中定義的對話框大小
- 21. WPF在另一個xaml文件中定義的自定義資源
- 22. 如何獲取資源組中使用的提供程序列表?
- 23. 如何在Puppet中定義多個不同定義資源的列表?
- 24. 如何改變顏色在XAML資源定義代碼(UWP)
- 25. C#資源文件 - 如何從XAML訪問內部資源?
- 26. 無法獲取文件夾中的資源列表
- 27. 如何使用python boto獲取給定安全組的資源?
- 28. 如何獲取資源並在其他xaml文件(WPF)中使用代碼?
- 29. C#資源與XAML資源
- 30. XAML資源命名約定
你想要所有的資源,無論它們是在app/window/usercontrol/style中定義的嗎? – Nitin
我只需要外部可用的資源。我不認爲你可以使用另一個程序集的UserControl/Window中定義的資源,對吧? – ionoy