相关疑难解决方法(0)

有没有办法观看WPF路由事件?

我想知道是否有办法观察WPF应用程序中引发的所有RoutedEvent.写一些关于向控制台发起的事件的信息的方法将是完美的,看看发生了什么.

debugging wpf routed-events

12
推荐指数
2
解决办法
5504
查看次数

Button.MouseDown

我是WPF的新手.我试图理解MouseDownEvent和PreviewMouseDownEvent之间的区别.

我理解WPF事件策略,我理解MouseDown事件是一个冒泡事件,PreviewMouseDown是一个隧道事件.

我也理解这些事件被触发的顺序 - 根据MSDN概述http://msdn.microsoft.com/en-us/library/ms742806.aspx#routing(这里有一个示例图).

所以我试着编写一些自己的代码,例如检查一下:

<Grid x:Name="grid" Width="250">
    <StackPanel Mouse.MouseDown="StackPanel_MouseDown" PreviewMouseDown="StackPanel_PreviewMouseDown">
    <WPFVisualizerExample:MyButton x:Name="B1" PreviewMouseDown="B1_PreviewMouseDown" MouseDown="B1_MouseDown" Margin="5,5,5,5">
            <WPFVisualizerExample:MyButton x:Name="B2" PreviewMouseDown="B2_PreviewMouseDown" MouseDown="B2_MouseDown"  Margin="5,5,5,5">
                <WPFVisualizerExample:MyButton x:Name="B3" PreviewMouseDown="B3_PreviewMouseDown" MouseDown="B3_MouseDown"  Margin="5,5,5,5">Click Me</WPFVisualizerExample:MyButton>
            </WPFVisualizerExample:MyButton>
    </WPFVisualizerExample:MyButton>           
    </StackPanel>        
</Grid>
Run Code Online (Sandbox Code Playgroud)

我为每个事件(预览和非预览)都有一个事件处理程序,我想看看发生了什么,抛出了哪个事件(我为每个事件显示了一个消息框).

'MyButton'用户控件只是扩展基本Button并覆盖OnMouseDown和OnPreviewMouseDown来设置e.Handled false:

    protected override void OnMouseDown(System.Windows.Input.MouseButtonEventArgs e)
    {            
        base.OnMouseDown(e);
        e.Handled = false;
    }

    protected override void OnPreviewMouseDown(System.Windows.Input.MouseButtonEventArgs e)
    {            
        base.OnPreviewMouseDown(e);
        e.Handled = false;
    }
Run Code Online (Sandbox Code Playgroud)

(试过这个,没有这个).

根据MSDN概述(在上面的链接中),如果我有3个元素,那么事件路由应该如下:

根元素上的PreviewMouseDown(隧道).

中间元素#1上的PreviewMouseDown(隧道).

源元素#2上的PreviewMouseDown(隧道).

源元素#2上的MouseDown(气泡).

MouseDown(气泡)在中间元素#1上.

根元素上的MouseDown(气泡).

所以我希望根据上面的内容显示消息框.出于某种原因 - 我不明白只会抛出预览事件(根据MSDN所说的Preview_B1 => Preview_B2 => Preview_B3).我的期望是:Preview_B1 => Preview_B2 …

c# wpf routedevents

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

wpf ×2

c# ×1

debugging ×1

routed-events ×1

routedevents ×1