我在窗口上有一堆控件,其中一个是刷新按钮,它会在后台线程上执行繁琐的任务。
当用户点击刷新按钮时,我会将光标设置为等待状态(沙漏图标)并禁用整个窗口 -- Me.IsEnabled = False
。
我想通过让用户点击取消按钮来支持取消刷新操作,但是在整个窗口被禁用的情况下无法实现这一点。
除了逐个禁用每个控件(除了取消按钮)然后在用户点击取消时逐个重新启用它们之外,还有其他方法吗?
我在窗口上有一堆控件,其中一个是刷新按钮,它会在后台线程上执行繁琐的任务。
当用户点击刷新按钮时,我会将光标设置为等待状态(沙漏图标)并禁用整个窗口 -- Me.IsEnabled = False
。
我想通过让用户点击取消按钮来支持取消刷新操作,但是在整个窗口被禁用的情况下无法实现这一点。
除了逐个禁用每个控件(除了取消按钮)然后在用户点击取消时逐个重新启用它们之外,还有其他方法吗?
您可以将所有控件放在一个面板(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;
StackPanel
文档:http://msdn.microsoft.com/en-US/library/windows/apps/windows.ui.xaml.controls.stackpanel.aspx。我猜你使用的是这个API,而不是Silverlight,因为Silverlight中有一个`IsEnabled`属性。虽然看起来并不能完全禁用控件,但你可以将`controlContainer`的`IsHitTestVisible="false"`设置为禁用输入。否则,你可以设计一个半透明的遮罩,在需要禁用其他控件时将其显示(并使用一个`Grid`作为外部容器)。 - Abe Heidebrecht我希望用户能够取消加载过程。我找到了一个很好的解决方案。
foreach (Control ctrl in this.Controls)
ctrl.Enabled = false;
CancelButton.Enabled = true;
this.Enabled = false;
完全锁定了窗口。