首页 > 解决方案 > 如何以编程方式获取动态资源键名?

问题描述

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

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

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

如何在 c# 代码中在运行时获取具有资源键名称的字符串(本示例中的“ MyTextFromRes ”)?

标签: c#wpfresourcedictionary

解决方案


创建以下辅助方法:

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);

我从这里改编了这个解决方案。


推荐阅读