如,一个控件,绑定了一个资源
<TextBlock x:Name="tb_hello" Text="{DynamicResource HelloString}"></TextBlock>
在后台代码中如何得到 HelloString ?

解决方案 »

  1.   

    貌似是 tb_hello.GetBindingExpression(TextBlock.TextProperty);
      

  2.   

    是找不到,我糊涂了,你这是资源引用!你要找啥呢? TextBlock 的资源名称? 还是其对应的值?
      

  3.   

    有几位战友是在使用WPF做开发的呢?
      

  4.   

    实在话,你的问题我还真没想过!拿来当作练习,没想到,还真费了一番功夫。
    // 利用 ReadLocalValue 获取资源对象
    var obj = tb_hello.ReadLocalValue(TextBlock.TextProperty);if (obj == null)
    {
        Console.WriteLine("Is Null");
    }
    else
    {
        // 对象倒是获取了, 是个什么东东呢?
        Console.WriteLine(obj.GetType().ToString());    // 通过这个能获取 obj 的类型为:
        // System.Windows.ResourceReferenceExpression
        // 存在于 PresentationFramework.dll 中
        // 但郁闷的是无法直接声明和调用    // 无奈之下只能用反射了
        Type type = obj.GetType();
        foreach (var pi in type.GetProperties())
        {
            Console.WriteLine(pi.Name);
        }    // 发现居然只有一个属性: ResourceKey
        PropertyInfo ifno = type.GetProperty("ResourceKey");
        Console.WriteLine(ifno.GetValue(obj, null));
    }