【问题标题】:How to get the name of a dependency property如何获取依赖属性的名称
【发布时间】:2013-08-01 05:24:03
【问题描述】:

出于绑定的目的,我们有一个方法返回传入的框架元素的最常见依赖属性。如果我们传入TextBlock,此方法返回TextBlock.TextPropertyRadMaskedTextBox 返回RadMaskedTextBox.MaskedTextProperty,以此类推。

调试时,如果输入dp.Name,我分别得到“Text”、“MaskedText”。但是dp.Name 在代码中不可用。

我正在尝试对工具提示进行动态绑定:

var binding = new Binding("Text")  //Works
{
    Source = frameworkElement
};

var binding = new Binding("MaskedText")  //Works
{
    Source = frameworkElement
};

var binding = new Binding(dp.Name)  //Doesn't work
{
    Source = frameworkElement
};

我不知道如何从依赖属性中获取“Text”或“MaskedText”,也不明白为什么一开始就隐藏它。

.Net Framework 4.5 / Silverlight 5

感谢您提供的任何帮助或见解! 京东

凯文,非常感谢,你已经很接近了。这是一个非公共领域,所以我这样做了:

{
var dpType = dp.GetType();
var nameField = dpType
                .GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
                .Single(pi => pi.Name == "Name");

var name = nameField.GetValue(dp);
}

但是,当我调用 nameField.GetValue(dp) 时,我得到了 FieldAccessViolation。我可以在手表上看到它,但实际上无法接近它。我希望有人能解释一下,因为我不明白为什么我不能获取/使用这个值。特别是当那个(字符串“MaskedText”)是必须为路径提供的内容时。啊!!!

但是非常感谢您的帮助! 京东

【问题讨论】:

  • 您在调试期间在哪里输入dp.Name?断点处的中间窗口?
  • dp是什么,在哪里初始化?
  • 它是通过调用我们的方法初始化的: var dp = ControlPropertyResolver.Resolve(typeof(TextBlock)); //返回依赖属性TextProperty。在调用后的断点处,我可以在 Watch 窗口中键入 dp.Name 并获取值“Text”
  • 当你说// Doesn't work... 是不是没有编译或者.Name 属性不是正确的值?
  • 写代码时dp没有属性,只有几个方法;所以 dp.Name 不会编译。但是当我遇到断点并将 dp 添加到手表时; dp.Name 返回“文本”,这是我需要的。这很奇怪。 DependencyProperty 上的名称是非公共属性,我只是不明白为什么。

标签: c# silverlight dependency-properties


【解决方案1】:

如果没有进一步的说明,我不能 100% 确定发生了什么...但是做一些假设应该可以通过反射获得名称...

var typeOfDp = dp.GetType();
var nameProperty = typeOfDp
                    .GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
                    .Single(t => t.Name == "Name");
var name = nameProperty.GetValue(dp);
var binding = new Binding(name)  //Maybe it will work?
{
    Source = frameworkElement
};

【讨论】:

猜你喜欢
  • 2015-12-12
  • 1970-01-01
  • 2010-10-14
  • 2017-05-04
  • 2015-09-20
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2022-08-23
相关资源
最近更新 更多