0

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

我是 WPF 和基于桌面的应用程序的新手,我正在学习事件处理。通过冒泡和隧道我在任何地方都找不到解释如何在 Button_Click 上使用隧道的示例。

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

我该怎么做才能确定 PreviewMouseDown 是由按钮单击触发的?或者:是否有替代/更好的方法是隧道 Button_Click?

谢谢

4

1 回答 1

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
    }
}
于 2011-08-11T10:29:12.580 回答