0

为了在 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);
        }
4

1 回答 1

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。您的过滤可能会遇到逻辑与视图树的问题 - 如果您从头开始创建自己的模板,您只想查看树。

于 2013-05-21T14:23:05.913 回答