是否可以枚举组件中定义的所有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