17

我的窗口上有一堆控件。其中之一是在后台线程上执行繁琐任务的刷新按钮。

当用户单击刷新按钮时,我将光标置于等待(沙漏)状态并禁用整个窗口 -- Me.IsEnabled = False

我想通过让用户单击取消按钮来支持取消刷新操作,但是当整个窗口被禁用时,我无法做到这一点。

除了一个一个地禁用每个控件(取消按钮除外)然后在用户单击取消时一个个地重新启用它们之外,还有其他方法吗?

4

3 回答 3

22

您可以将所有控件放在一个面板中(Grid、StackPanel 等),而将取消按钮留在另一个面板中。然后设置另一个面板的 IsEnabled 属性。

在实践中,这可能会引入不止一个额外的面板。

例如,如果您有一个 StackPanel 按钮,您可以添加一个额外的 StackPanel:

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

然后,您将执行以下操作来禁用除取消按钮之外的所有内容:

controlContainer.IsEnabled = false;
于 2008-11-07T22:33:48.680 回答
5

我还希望用户能够取消加载。我找到了一个可爱的解决方案。

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

CancelButton.Enabled = true;

这也允许选择和移动主窗口,this.Enabled = false; 这与完全锁定窗口不同。

于 2011-02-07T22:00:59.477 回答
3

您可以将每个控件的 IsEnabled 属性数据绑定到您的自定义布尔依赖项属性,该属性会在您的应用程序处于锁定状态时发出信号。只是不要绑定取消按钮。

正如 Donnelle 提到的,您可以使用转换器设置多重绑定。这里有几个例子你可以参考。 WPF MultiBinding 与转换器 实现参数化 MultiBinding 示例

于 2008-11-07T22:30:33.477 回答