Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WPF窗口中禁用除一个子控件以外的所有控件_Wpf_Xaml_Controls_Code Behind - Fatal编程技术网

在WPF窗口中禁用除一个子控件以外的所有控件

在WPF窗口中禁用除一个子控件以外的所有控件,wpf,xaml,controls,code-behind,Wpf,Xaml,Controls,Code Behind,我的窗户上有一堆控件。其中一个是刷新按钮,它在后台线程上执行繁琐的任务 当用户单击刷新按钮时,我将光标置于等待(沙漏)状态并禁用整个窗口--Me.IsEnabled=False 我希望通过让用户单击“取消”按钮来支持取消刷新操作,但在整个窗口被禁用时,我无法实现这一点 除了逐个禁用每个控件(取消按钮除外),然后在用户单击“取消”时逐个重新启用它们之外,还有其他方法可以做到这一点吗?您可以将每个控件的IsEnabled属性数据绑定到自定义布尔依赖性属性,该属性在应用程序处于锁定状态时发出信号。只是

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

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

我希望通过让用户单击“取消”按钮来支持取消刷新操作,但在整个窗口被禁用时,我无法实现这一点


除了逐个禁用每个控件(取消按钮除外),然后在用户单击“取消”时逐个重新启用它们之外,还有其他方法可以做到这一点吗?

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

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

您可以将所有控件放在一个面板(网格、堆栈面板等)中,并将取消按钮保留在另一个面板中。然后设置另一个面板的IsEnabled属性

实际上,这可能会引入一个以上的额外面板

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

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

我还希望用户能够取消加载。 我找到了一个很好的解决办法

foreach(此.Controls中的控件ctrl)
ctrl.Enabled=false;
CancelButton.Enabled=true;
这也允许选择和移动主窗口,不像
This.Enabled=false

它完全锁定了窗口。

我唯一的问题是,我的一些控件上的IsEnabled属性已经被数据绑定到布尔属性,用于其他目的。您可以使用带转换器的多重绑定——这里有一些示例说明如何使用AND或or行为的参数进行通用绑定。我看不出来要同时使用Me.IsEnabled和Me.Cursor。StackPanel在WP8中没有IsEnabled属性好吧,我对WP8做了0项工作,但是我找到了WP8
StackPanel
:我假设您使用的是该api,而不是Silverlight api,因为Silverlight有一个
IsEnabled
属性。虽然无法获得已禁用控件的确切外观,但始终可以将
ishitestvisible=“false”
设置为禁用
controlContainer
上的输入。否则,当您想要禁用其他控件(并使用
网格
作为外部面板)时,可以使用半透明覆盖层使其可见。控件在WP8中没有IsEnabled属性
controlContainer.IsEnabled = false;