通过Reflection设置附加属性的值

时间:2017-02-07 16:13:04

标签: c# wpf xaml reflection dependency-properties

我能够获得一个名为ShowKeyboardCuesProperty的属性,它是KeyboardNavigation类中存在的附加依赖属性。它是一个内部静态DP,没有后备CLR属性。

(typeof(KeyboardNavigation).GetMember("ShowKeyboardCuesProperty", MemberTypes.All, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static)[0] as FieldInfo)

我需要在另一个可以轻松获取引用的元素上设置这个附加属性。让我们将该元素称为DependencyObject d。

如何调用d.SetValue()并将上面附加的属性(从FieldInfo)设置为true?

或者还有其他方法可以实现同样的目标吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

FieldInfo fi = (typeof(KeyboardNavigation).GetMember("ShowKeyboardCuesProperty",
    MemberTypes.All, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static)[0] as FieldInfo);

DependencyObject o = new Button();

DependencyProperty dp = fi.GetValue(o) as DependencyProperty;
bool value = (bool)o.GetValue(dp); //= false
o.SetValue(dp, true);
value = (bool)o.GetValue(dp); // = true