如何以编程方式获取动态资源密钥名称?

时间:2019-01-19 17:11:30

标签: c# wpf resourcedictionary

我的程序在运行时使用以下WPF声明声明加载XAML文件。使用XamlReader.Load(...)方法。

<TextBlock Name="txMy" Text="{DynamicResource ResourceKey=MyTextFromRes}"/>

它工作完美,可以正确显示动态词典中的文本。 现在,我需要在运行时知道该资源字典的KEY的名称,因为XAML文件可以多种多样。我需要使用相关的字典值。

如何在运行时使用C#代码获取带有资源密钥名称的字符串(此示例中为“ MyTextFromRes ”)?

1 个答案:

答案 0 :(得分:0)

创建以下帮助方法:

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的解决方案。

相关问题