这是我的第一个问题,所以请放轻松:)
我是WPF和基于桌面的应用程序的新手,我正在研究事件处理。经历冒泡和隧道我无法找到解释如何在Button_Click上使用隧道的示例。
基本上,当我单击一个按钮时,我需要父控件(在本例中为网格)来首先处理事件并在允许Button_Click发生之前进行一些检查。我遇到的问题是我可以使用Grid_PreviewMouseDown捕获事件,但这是不明确的!它没有告诉我(至少我认为它没有)什么控制导致处理程序触发。
如何确定PreviewMouseDown是由Button Click触发的?要么: 有没有替代/更好的方法来隧道一个Button_Click?
由于
答案 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
}
}