我是WPF的新手,看看this文章。我相信我问的是一个非常基本的问题,但无法找到答案。至少在正确方向上的推动将深受赞赏。 我创建了一个wpf应用程序,然后按如下方式派生了一个TextBox类,并在其上定义了一个依赖项对象。
public class TextBoxEx : TextBox
{
public string SecurityId
{
get
{
return (string)GetValue(SecurityIdProperty);
}
set
{
SetValue(SecurityIdProperty, value);
}
}
public static readonly DependencyProperty
SecurityIdProperty = DependencyProperty.Register("SecurityId",
typeof(string), typeof(TextBoxEx),
new PropertyMetadata(""));
}
在窗口构造函数中,我看到了这一点。
public MainWindow()
{
InitializeComponent();
TextBoxEx t1 = new TextBoxEx();
t1.SecurityId = "abc";
TextBoxEx t2 = new TextBoxEx();
var secId = t2.SecurityId;
}
我看到从t2.SecurityId分配的secId是"",而我希望它是" abc"。
那么WPF依赖属性系统如何知道依赖属性值属于哪个对象实例?我看不到this
参数传递给dp属性系统,所以它怎么知道?
答案 0 :(得分:1)
我认为神奇的是GetValue的实现,它有点复杂:http://www.abhisheksur.com/2011/07/internals-of-dependency-property-in-wpf.html
答案 1 :(得分:1)
SecurityId
是一个实例(即非静态)属性,它调用实例方法DependencyObject.GetValue()
和DependencyObject.SetValue()
。
如果你想在某个地方看到this
关键字,你可以写下这样的属性:
public string SecurityId
{
get { return (string)this.GetValue(SecurityIdProperty); }
set { this.SetValue(SecurityIdProperty, value); }
}