我正在努力了解Silverlight依赖属性系统的底层细节。
我意识到DependencyObject没有明确的DataContext属性,甚至没有父级的概念。
然而,从DependencyObject派生的Behavior类具有绑定,该绑定使用它所附加的DataContext作为自身绑定的Source。
我的问题是:我可以从DependencyObject派生一个类,并以某种方式确定在Source中使用哪个其他对象进行绑定吗?或者更清楚地说:如何实现Behavior类之类的东西?
DataContext是FrameworkElement属性。通过使用父子属性继承,绑定系统可以解析存在于父元素上的DataContext,即使子对象(具有目标属性(不是FrameworkElement,并且因此不保持其自身的DataContext值。然而父元素必须是FrameworkElement才能设置和保持DataContext。或者,您必须定义绑定,以便可以在空DataContext的情况下运行。
和
从Silverlight 4开始,目标也可以是DependencyObject在以下情况下的DependencyProperty:
DependencyObject是FrameworkElement的属性的值。
DependencyObject位于集合中,该集合是FrameworkElement属性(例如Resources属性(。
DependencyObject位于DependencyObjectCollection中。
从Silverlight 5开始,目标也可以是Value属性一种风格中的设置者。有关示例,请参见Style类概述
因此,你的问题的答案是:是的,你可以从DependencyObject派生你的类,只要满足上面列出的条件,或者绑定不依赖于DataContext(使用的ElementName或Source属性(,它的依赖属性上的绑定就会起作用。