Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取依赖项属性的名称_C#_Silverlight_Dependency Properties - Fatal编程技术网

C# 如何获取依赖项属性的名称

C# 如何获取依赖项属性的名称,c#,silverlight,dependency-properties,C#,Silverlight,Dependency Properties,出于绑定目的,我们有一个方法返回传入的框架元素的最常见的依赖项属性。如果传入TextBlock,该方法返回TextBlock.TextProperty;RadMaskedTextBox返回RadMaskedTextBox.MaskedTextProperty,依此类推 调试时,如果键入dp.Name,我将分别得到Text和MaskedText。但是dp.Name在代码中不可用 我正在尝试对工具提示进行动态绑定: var binding = new Binding("Text") //Works

出于绑定目的,我们有一个方法返回传入的框架元素的最常见的依赖项属性。如果传入TextBlock,该方法返回TextBlock.TextProperty;RadMaskedTextBox返回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
};
我不知道如何从dependency属性中获取文本或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.GetValuedp时,我会遇到FieldAccessViolation。我可以在手表上看到它,但实际上无法找到它。我希望有人能解释一下,因为我不明白为什么我不能获得/使用这个值。特别是当必须为路径提供字符串MaskedText时。啊

但是非常感谢你的帮助!
JD

如果没有进一步的澄清,我不能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
};

调试期间,您在哪里键入dp.Name?断点处的中间窗口?什么是dp,在哪里初始化它?它是通过调用我们的方法初始化的:var dp=ControlPropertyResolver.ResolvetypeofTextBlock//返回dependencyProperty TextProperty。在调用后的断点处,我可以在“监视”窗口中键入dp.Name,并在您说//不工作时获取一个text值。。。是否未编译或.Name属性的值不正确?编写代码时,dp没有属性,只有几个方法;因此dp.Name将不会编译。但是当我到达一个断点并将dp添加到手表上时;Name返回我需要的文本。这很奇怪。从属财产上的名称是非公共财产,我只是不明白为什么。我确实尝试过,而且很接近。我用我的尝试和结果更新了我的原始评论。非常感谢。JDI您遇到了反射权限问题。。