WPF隧道一个Button_Click

时间:2011-08-11 10:10:27

标签: c# wpf routed-events tunneling

这是我的第一个问题,所以请放轻松:)

我是WPF和基于桌面的应用程序的新手,我正在研究事件处理。经历冒泡和隧道我无法找到解释如何在Button_Click上使用隧道的示例。

基本上,当我单击一个按钮时,我需要父控件(在本例中为网格)来首先处理事件并在允许Button_Click发生之前进行一些检查。我遇到的问题是我可以使用Grid_PreviewMouseDown捕获事件,但这是不明确的!它没有告诉我(至少我认为它没有)什么控制导致处理程序触发。

如何确定PreviewMouseDown是由Button Click触发的?要么: 有没有替代/更好的方法来隧道一个Button_Click?

由于

1 个答案:

答案 0 :(得分:1)

在你的处理程序中,你应该检查事件的Source以获得启动它的控件。请注意,它不是只读的,可以更改,因此Source引用不同的控件。

您可能会更好地注明PreviewMouseLeftButtonDown事件,以获得左键点击而不是任何点击。

如果您的处理程序仅用于查找鼠标左键,则可以使用以下代码:

private void Grid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    Button button = e.Source as Button;
    if (button != null)
    {
        // button is being clicked, handle it
    }
}