Disabling all but one child control in a WPF window

我是研究僧i 提交于 2019-11-30 18:07:43

You can put all the controls in one panel (Grid, StackPanel, etc.), and leave the cancel button in another panel. Then set the IsEnabled property of the other panel.

In practice, this will probably introduce more than one additional panel.

For example, if you had a StackPanel of buttons, you can add an additional StackPanel:

<StackPanel Orientation="Horizontal">
    <StackPanel x:Name="controlContainer" Orientation="Horizontal">
        <!-- Other Buttons Here -->
    </StackPanel>
    <Button Content="Cancel" />
</StackPanel>

Then, you would do the following to disable everything but the cancel button:

controlContainer.IsEnabled = false;
DJR

I also wanted the user to be able to cancel out of loading. I found a lovely solution.

foreach (Control ctrl in this.Controls)
    ctrl.Enabled = false;

CancelButton.Enabled = true;

This also allows the main window to be selected and moved unlike this.Enabled = false; which completely locks up the window.

You can data bind each controls IsEnabled property to your custom boolean dependency property that signals when your application is in lock down. Just don't bind the cancel button.

As Donnelle mentioned You can setup multi binding with a converter. Here are a couple examples you can refer to. WPF MultiBinding with Converter Implementing Parameterized MultiBinding Sample

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!