禁用WPF窗口中的所有输入控件

7uhlpewt  于 2023-10-22  发布在  其他
关注(0)|答案(3)|浏览(191)

有没有一种方法可以让整个WPF窗口在点击按钮后变成惰性的?
该窗口通过Window.ShowDialog()调用,使用后,该窗口不再需要交互,但我让它打开以提醒用户在TextBox、ListBox中的输入,并通过OxyPlot等方式给予视觉反馈。我让用户手动关闭窗口。
一个解决方案是禁用所有按钮,但这是乏味的,它仍然离开文本框的功能。这不是最佳的,因为任何功能都会产生错误的印象,认为窗口除了看之外还有其他用途。最好每个控件都通过一个设置不起作用。

pprl5pva

pprl5pva1#

我通过在WPF窗口代码后面放置一个名称,然后在相应的按钮单击时设置.IsEnabled为false来实现。所有的按钮、组合框、文本框,甚至OxyPlot在这一点上都变成了惰性的,大多数部分都变灰了。

bq8i3lrv

bq8i3lrv2#

考虑在代码隐藏或视图模型中创建一个专用的布尔依赖属性,并将每个TextBoxIsEnabled绑定到该属性。

iklwldmw

iklwldmw3#

一个选项是阻止输入到窗口中最底部的容器。这允许他们移动窗口或调整窗口大小,但他们不能与任何控件交互。
以这种方式禁用窗口确实意味着没有控件看起来被禁用,这可能不是您想要的UX。

private bool _windowFrozen = false;

public MyDialog()
{
    pnlParent.PreviewKeyDown += PnlParent_PreviewKeyDown;
    pnlParent.PreviewMouseDown += PnlParent_PreviewMouseDown;
}

private void PnlParent_PreviewKeyDown(object sender, KeyEventArgs e)
{
    e.Handled = _windowFrozen;
}

private void PnlParent_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    e.Handled = _windowFrozen;
}

相关问题