在画布下制作不接收事件

时间:2017-02-27 09:34:56

标签: c# wpf user-interface events

我正在使用Visual C#2015来开发WPF项目。

Button下面有一个Canvas。我想让Canvas捕获所有鼠标事件,以便只要Button在前面,Canvas就不会收到任何这些事件。如果可能,我还希望阻止Button接收用户输入生成的任何事件,例如KeyDownMouseMove

我如何做到这一点?

1 个答案:

答案 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)。