【问题标题】:How to get a dynamic resource key name programmatically?如何以编程方式获取动态资源键名?
【发布时间】:2019-01-19 17:11:30
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# wpf resourcedictionary


    【解决方案1】:

    创建以下辅助方法:

    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 改编了这个解决方案。

    【讨论】:

    • 谢谢,但我需要其他的。我想获取分配给属性的资源的密钥。我也很高兴得到带有整个表达式“{DynamicResource ResourceKey=MyTextFromRes}”的字符串
    • @user3774699 您应该编辑您的问题以明确您想要什么。您需要在 XAML 中分配资源吗?您可以通过编程方式分配它,这样您就可以知道您分配给属性的键。
    • XAML 文件在运行时动态加载。 XamlReader 正确加载 XAML,所有声明的控件都运行良好。在运行时,我看到名为“txMy”的 TextBlock 实例。它的属性 txMy.Text 显示来自相关字典的值。现在我需要知道在 Text 属性中声明的 KEY NAME。好的,我会尝试编辑问题。
    猜你喜欢
    • 2013-10-25
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多