c# - 如何以编程方式获取动态资源键名?
问题描述
我的程序在运行时加载带有以下 WPF 控件声明的 XAML 文件。使用 XamlReader.Load(...) 方法。
<TextBlock Name="txMy" Text="{DynamicResource ResourceKey=MyTextFromRes}"/>
它工作完美,并正确显示动态字典中的文本。现在我需要在运行时知道该资源字典的 KEY 的名称,因为 XAML 文件可以是多种多样的。我需要使用相关的字典值。
如何在 c# 代码中在运行时获取具有资源键名称的字符串(本示例中的“ MyTextFromRes ”)?
解决方案
创建以下辅助方法:
public string GetDynamicResourceKey(DependencyObject dObj, DependencyProperty dp)
{
var value = dObj.ReadLocalValue(dp);
var converter = new ResourceReferenceExpressionConverter();
var dynamicResource = converter.ConvertTo(value, typeof(MarkupExtension)) as DynamicResourceExtension;
return dynamicResource?.ResourceKey as string;
}
现在,将它与您的TextBlock
:
var resourceKey = GetDynamicResourceKey(txMy, TextBlock.TextProperty);
我从这里改编了这个解决方案。
推荐阅读
- python - Pytorch - 使用现有模型的部分或片段
- python - 来自导入模块的 PEP8 和长方法名称
- python - 当数据集有“-”和“无”单元格时,Pandas 填充缺失的数据
- docker - Docker 卷是否使用跨 Docker 服务副本共享的本地驱动程序?
- apache-kafka - 设置 clauster 时,kafka 代理的推荐 RAM 大小是多少?
- r - 按日期聚合列表中的数据框,然后合并回来 - lapply?
- excel - 在信息有限的情况下增加/减少值
- ios - 自定义 UITableViewCell 中的 UIView 不可见
- javascript - 如何使用 Node-JS 在浏览器的客户端执行 javascript 函数?
- java - 如何在 IntelliJ 插件中添加事件侦听器?