代码之家  ›  专栏  ›  技术社区  ›  Akash Kava

什么是WPF预览活动?

  •  72
  • Akash Kava  · 技术社区  · 16 年前

    我一直在寻找事件“Preview******”的描述,就像每个元素都有events KeyDown和PreviewKeyDown一样。区别是什么(不是一个是附加事件,一个不是,真正的常规区别和编程方式的区别)

    在从控件派生的任何类中,都可以重写这两个方法。。OnKeyDown和OnPreviewKeyDown,现在我正在编写我的自定义控件,我应该使用哪种方法?它们之间有什么区别呢。

    4 回复  |  直到 16 年前
        1
  •  129
  •   Gishu    16 年前

    来自编程WPF-克里斯·塞尔斯和伊恩·格里菲斯

    除直接事件外, 始终以“预览”开头,并且是 首先提出。这给了父母 有机会在它之前看到这个事件 在这些情况下,您将只处理 冒泡的。预览将是 通常用于

    • e.Handled = true )
    • 使父级在正常事件处理之前执行某些操作。


    单击椭圆将导致(鼠标向下按钮被按钮吃掉,而单击被提升。)

    PreviewMouseDownButton
    PreviewMouseDownGrid
    PreviewMouseDownCanvas
    PreviewMouseDownEllipse
    MouseDownEllipse
    MouseDownCanvas
    MouseDownGrid
    
        2
  •  9
  •   Bubblewrap    16 年前

    我发现这篇博客文章在描述差异方面非常有用:

    http://joshsmithonwpf.wordpress.com/2007/06/22/overview-of-routed-events-in-wpf/

        3
  •  3
  •   Nick    16 年前

    基本上,这是同一事件,但发生在主要事件之前。它们的存在使您可以侦听这些类型的事件,而不会在这些事件发生时干扰控件的正常行为。

    例如,当你点击或鼠标点击时,按钮会做一些事情。如果你自己处理这些事件,你必须确保你做了同样的事情,否则你的按钮不会做同样的事情。预览事件在同一时间线上为您提供一个事件,而不必担心会干扰现有功能。

    这在处理自定义样式/触发器/控件模板时特别有用。当您开始覆盖控件外观/行为时。

    因此,在您的控制下,在OnKeyDown事件中完成您想要的主要工作,并将预览事件留给其他人使用,这就是我如何处理它们的方式。

        4
  •  3
  •   jturinetti    16 年前

    这种差异与路由事件有关,这是WPF实现其事件处理策略的方式。标准事件名称(如KeyDown等)意味着冒泡路由策略。带有“Preview”(即PreviewKeyDown等)的前缀表示隧道路由策略。您可以更详细地阅读这些策略 here . 基本上,当调用WPF中的事件时,它首先从可视化树中最顶端的元素向下移动到调用该事件的元素,最后向上返回。在树下的过程中,您将遇到PreviewKeyDown事件,在回程中,您将遇到KeyDown事件,顺序如下。