要在WPF中模拟模式对话框,我会显示一个窗口并调用:Mouse.Capture(dialogBoxArea, CaptureMode.SubTree);
通话返回false
。
Mouse.Captured
是null
。
dialogBoxArea.Visibility
是Visibility.Visible
。
dialogBoxArea.IsEnabled
为true
。
如果第二次再次调用该行,它将返回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);
}
答案 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。您的过滤可能会遇到逻辑与视图树的问题 - 如果您从头开始创建自己的模板,您只需要查看树。