gpt4 book ai didi

c# - 以编程方式从 MergedDictionaries 获取应用程序 XAML 资源

转载 作者:行者123 更新时间:2023-11-30 21:52:26 24 4
gpt4 key购买 nike

Universal Windows 8.1 Store Project 在这里。

我需要以编程方式从给定资源名称的应用程序的合并字典中获取资源。

我想出了一个实用方法,可以得到我想要的东西,但对我来说看起来很丑陋:

public static async Task<T> GetAppResource<T>(string key) where T:class
{
T resource = default(T);
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
()=>{
foreach (var d in Application.Current.Resources.MergedDictionaries) {
foreach (var pair in d) {
if (pair.Key.ToString() == key && pair.Value is T) {
resource = pair.Value as T;
goto End;
}
}
}
End:;
}
);
return resource;
}

有更好的方法吗?

字典声明如下:

<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..." />
<ResourceDictionary Source="..." />
...
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

实际上,我正在以编程方式打开合并词典中声明的浮出控件。

最佳答案

通过 MergedDictionaries 属性添加到 ResourceDictionary 的词典有效地成为添加它们的 ResourceDictionary 的一部分。从顶级 ResourceDictionary 中检索值将涉及在主字典中搜索值的键,如果找不到,则遍历 MergedDictionaries 以搜索键。

因此,可以检索通过 MergedDictionaries 添加的资源,就像它们仅包含在顶级词典中一样。主要区别在于合并字典中允许重复键,如果在顶级字典中找不到,则从最后找到它的合并字典中检索给定键的值。

因此您可以在顶级字典上调用 TryGetValue(),使用索引器语法(例如 Application.Current.Resources["someKey"]),或者甚至使用适当的 FindResource() 调用(即取决于上下文是 Application 对象还是 FrameworkElement 对象)。资源将被检索,就好像它在顶级字典本身中一样。


我希望以上内容充分阐述了文档。 MSDN 中的文档(例如 Merged Resource Dictionaries )在某种程度上暗示了上述内容,但它们从来没有真正明确地说出来。 :( 该文档更侧重于如何创建合并词典,而不是如何在创建后实际使用它们。

关于c# - 以编程方式从 MergedDictionaries 获取应用程序 XAML 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34785247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com