如何以编程方式获取动态资源键名?
How to get a dynamic resource key name programmatically?
我的程序在运行时加载 XAML 文件,其中包含以下 WPF 控件声明。使用 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);
我从 here 改编了这个解决方案。
我的程序在运行时加载 XAML 文件,其中包含以下 WPF 控件声明。使用 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);
我从 here 改编了这个解决方案。