Mouse.Capture返回false并失败

时间:2013-05-17 19:28:13

标签: wpf mousecapture

要在WPF中模拟模式对话框,我会显示一个窗口并调用:Mouse.Capture(dialogBoxArea, CaptureMode.SubTree);

通话返回false

Mouse.CapturednulldialogBoxArea.VisibilityVisibility.VisibledialogBoxArea.IsEnabledtrue

如果第二次再次调用该行,它将返回true并正确捕获鼠标。

我可能缺少什么条件阻止捕获工作?

修改

这是我到目前为止所尝试的内容。

        if (Mouse.Captured != null)
        {
            // Not called, so presumably, nothing has already captured the mouse
            MessageBox.Show("already captured");
        }

        if (dialogBoxArea.Visibility != Visibility.Visible)
        {
            // Not called
            MessageBox.Show("not visible");
        }

        if (!dialogBoxArea.IsEnabled)
        {
            // Not called
            MessageBox.Show("not enabled");
        }

        // According to documentation, this should release mouse capture from anything that holds it
        Mouse.Capture(null);

        // Attempt to capture the mouse
        if (!Mouse.Capture(dialogBox, CaptureMode.SubTree))
        {
            // This is called
            Mouse.Capture(null);
            Mouse.Capture(dialogBox, CaptureMode.SubTree);
        }

1 个答案:

答案 0 :(得分:1)

作为第一次迭代,我会与您的客户交谈。

以下打开一个对话框选项窗口,该窗口始终位于原始窗口之上并阻止对其的调用,但不会妨碍整体执行。如果您的客户看到了他可能对此感到满意的行为。

namespace StackoverflowExample
{
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();
    }
    void NewWindowAsDialog(object sender, RoutedEventArgs e)
    {
      Window myOwnedDialog = new Window();
      myOwnedDialog.Owner = this;
      myOwnedDialog.ShowDialog();
    }
  }
}

我稍后会在这里发布另一个选项,说明如何将窗口加载到xaml的细分(网格等)中。您可以根据加载到该部门的内容过滤所有其他调用,而不是过滤mouscall。您的过滤可能会遇到逻辑与视图树的问题 - 如果您从头开始创建自己的模板,您只需要查看树。