我正在使用Visual C#2015来开发WPF项目。
Button
下面有一个Canvas
。我想让Canvas
捕获所有鼠标事件,以便只要Button
在前面,Canvas
就不会收到任何这些事件。如果可能,我还希望阻止Button
接收用户输入生成的任何事件,例如KeyDown
或MouseMove
。
我如何做到这一点?
答案 0 :(得分:2)
如果要停止事件传播,可以使用:
private void CanvasEvent(object sender, RoutedEventArgs e)
{
// Draw/Move stuff
...
e.Handled = true;
}
在您的事件处理程序中。另一种方法是disable
Button
或仅在使用时添加它。第三种方法可以是添加bool
标志,例如isDrawing
并在Button
事件处理程序中检查标记。
private void CanvasEvent(object sender, RoutedEventArgs e)
{
// When drawing etc. starts, where the button should not handle the events
isDrawing = true;
}
private void ButtonEvent(object sender, RoutedEventArgs e)
{
if (isDrawing) { return; }
// When not drawing do stuff
...
}
我更喜欢e.Handled = true;
方法。
有必要为Background
explicite设置Canvas
,否则它不会被命中测试(请参阅:WPF: Canvas Events Not working)。