我是WPF的新手。虽然我正在阅读网络的教程和文章,但我有疑虑。到目前为止已经出现的一些问题是
什么是路由事件以及服务器有什么额外的事情?
什么是依赖属性及其好处。
依赖项属性与附加属性的区别。
为什么第一次冒泡后会发生隧道效应?这是什么目的?
e.g。
<canvas>
<button canvas.left=10/>
</canvas>
是依赖属性还是附加属性?
由于
答案 0 :(得分:2)
附加属性是另一种形式的依赖属性,可以附加到任何类型的对象。由于速度慢,TextBlock.FontSize
附加属性
<Canvas TextBlock.FontSize="10">
<TextBlock Text="Test" />
</Canvas>
冒泡用于* _Changing事件,隧道用于* _Changed事件。因此,如果您需要验证和处理某些内容,您必须使用* _Changing事件,如果您通过* _Changed事件进行验证,则可能无法处理(取消)它。
答案 1 :(得分:1)
1(&amp; 4):路由事件要么冒泡,要么沿着可视树向下隧道。如果有人在整个过程中对事件args设置“Handled = true”,那么就不会再进一步了。关键是,您不知道可视化树中的哪个人将获得click事件(例如,一个按钮可能包含带有Image和TextBlock的StackPanel ...当单击该按钮时,该事件可能会转到其中任何一个),但是使用路由事件机制,您可以获得关于谁应该处理事件的所有控制权。惯例是隧道事件的名称以预览为前缀(例如,PreviewMouseDown是MouseDown冒泡事件的隧道版本。)
2:关于依赖属性的事情是它们实际上并没有“拥有”一个值 - 任何点的值都取决于各种其他因素(例如:任何样式,触发器,默认值等)。当存在这些因素中的一些时,有一个优先顺序决定了将使用哪个值...... see here。这使得容易改变元素的显示(例如,当鼠标在其上时),然后将其改变回例如当鼠标不再在其上时之前的任何内容。依赖项属性的值也可以从祖先继承 - 这对于像DataContext这样的东西非常有用。因此,您可以设置元素的DataContext,并且所有子元素都可以访问它。
3:附加属性使子元素能够存储与祖先上的属性关联的值。就像在示例中一样,'left'属性属于按钮的父级画布。附加属性意味着多个子元素可以在祖先上为同一属性存储不同的值。
我希望这有助于......继续挖掘并提出问题 - 值得深入了解这些内容!