WPF中的一些疑问

时间:2010-03-23 07:47:36

标签: wpf

我是WPF的新手。虽然我正在阅读网络的教程和文章,但我有疑虑。到目前为止已经出现的一些问题是

  1. 什么是路由事件以及服务器有什么额外的事情?

  2. 什么是依赖属性及其好处。

  3. 依赖项属性与附加属性的区别。

  4. 为什么第一次冒泡后会发生隧道效应?这是什么目的?

  5. e.g。

    <canvas>
       <button canvas.left=10/> 
    </canvas>
    

    是依赖属性还是附加属性?

    由于

2 个答案:

答案 0 :(得分:2)

  1. 路由事件是为元素树设计的事件,当路由事件提升时,它可以向上(冒泡)向下(隧道)元素树。例如,如果网格中有按钮,则单击按钮以便路由可以将树提升为网格。
  2. 依赖属性是另一种属性,可以在其值发生变化时通知,也可以继承并支持多个提供者。
  3. 附加属性是另一种形式的依赖属性,可以附加到任何类型的对象。由于速度慢,TextBlock.FontSize附加属性

    <Canvas TextBlock.FontSize="10"> <TextBlock Text="Test" /> </Canvas>

  4. 冒泡用于* _Changing事件,隧道用于* _Changed事件。因此,如果您需要验证和处理某些内容,您必须使用* _Changing事件,如果您通过* _Changed事件进行验证,则可能无法处理(取消)它。

  5. 在您的示例中附加了属性。

答案 1 :(得分:1)

1(&amp; 4):路由事件要么冒泡,要么沿着可视树向下隧道。如果有人在整个过程中对事件args设置“Handled = true”,那么就不会再进一步​​了。关键是,您不知道可视化树中的哪个人将获得click事件(例如,一个按钮可能包含带有Image和TextBlock的StackPanel ...当单击该按钮时,该事件可能会转到其中任何一个),但是使用路由事件机制,您可以获得关于谁应该处理事件的所有控制权。惯例是隧道事件的名称以预览为前缀(例如,PreviewMouseDown是MouseDown冒泡事件的隧道版本。)

2:关于依赖属性的事情是它们实际上并没有“拥有”一个值 - 任何点的值都取决于各种其他因素(例如:任何样式,触发器,默认值等)。当存在这些因素中的一些时,有一个优先顺序决定了将使用哪个值...... see here。这使得容易改变元素的显示(例如,当鼠标在其上时),然后将其改变回例如当鼠标不再在其上时之前的任何内容。依赖项属性的值也可以从祖先继承 - 这对于像DataContext这样的东西非常有用。因此,您可以设置元素的DataContext,并且所有子元素都可以访问它。

3:附加属性使子元素能够存储与祖先上的属性关联的值。就像在示例中一样,'left'属性属于按钮的父级画布。附加属性意味着多个子元素可以在祖先上为同一属性存储不同的值。

我希望这有助于......继续挖掘并提出问题 - 值得深入了解这些内容!