在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项工作,但是我找到了WP8StackPanel
:我假设您使用的是该api,而不是Silverlight api,因为Silverlight有一个IsEnabled
属性。虽然无法获得已禁用控件的确切外观,但始终可以将ishitestvisible=“false”
设置为禁用controlContainer
上的输入。否则,当您想要禁用其他控件(并使用网格
作为外部面板)时,可以使用半透明覆盖层使其可见。控件在WP8中没有IsEnabled属性
controlContainer.IsEnabled = false;