Z顺序和事件处理wpf

时间:2009-07-22 06:12:18

标签: wpf image event-handling z-index

这是我的问题here的后续跟进。即使InkPresenter最接近用户,似乎MouseDown / MouseMove / MouseUp事件也会被Image元素接收。有谁知道为什么会这样?

修改:如果我没有让问题更清楚,我很抱歉:

我已将事件处理程序附加到InkPresenter,这是Image的兄弟。我已将ZIndex的{​​{1}}设置为2(其他元素的值为0 InkPresenter)。我不确定为什么Image会收到事件处理程序。我假设具有最高ZIndex的元素最接近用户。因此,它将是第一个收到用户生成的ZIndex / MouseDown / MouseMove事件,但在这种情况下,MouseUp会收到它们。

我的代码如下:

CustomImage.cs

Image

Generic.xaml

[TemplatePart(Name="PART_InkPresenter",Type=typeof(InkPresenter))]
[TemplatePart(Name="PART_Image",Type=typeof(Image))]
public class CustomImage : Control
{
    public static DependencyProperty SourceProperty;

    public string Source
    {
        get { return (string)GetValue(SourceProperty); }
        set { SetValue(SourceProperty,value); }
    }

    private InkPresenter _presenter;
    private Image _image;


    static CustomImage()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomImage),
                new FrameworkPropertyMetadata(typeof(CustomImage)));

        SourceProperty = DependencyProperty.Register("Source",
                typeof(string), typeof(CustomImage));
    }

    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        _presenter = base.GetTemplateChild("PART_InkPresenter") as InkPresenter;
        _image = base.GetTemplateChild("PART_Image") as Image;

        _presenter.MouseDown += new MouseButtonEventHandler(_presenter_MouseDown);
        _presenter.MouseMove += new MouseEventHandler(_presenter_MouseMove);
        _presenter.MouseUp += new MouseButtonEventHandler(_presenter_MouseUp);


    }

    void _presenter_MouseUp(object sender, MouseButtonEventArgs e)
    {
        // ...
    }

    void _presenter_MouseMove(object sender, MouseEventArgs e)
    {
        // ...
    }

    void _presenter_MouseDown(object sender, MouseButtonEventArgs e)
    {
       // ...
    }

1 个答案:

答案 0 :(得分:1)

因为他们没有被其他任何东西处理?如果没有人处理事件(将e.Handled设置为true),他们将继续遍历WPF可视化树。这就是路由事件应该做的事情。

你还没有给出足够的信息来知道是否应该处理它们。