C# 如果第1页的backgroundworker为true,则主窗口上的WPF停止单击事件

C# 如果第1页的backgroundworker为true,则主窗口上的WPF停止单击事件,c#,wpf,vb.net,backgroundworker,C#,Wpf,Vb.net,Backgroundworker,WPF vb.net桌面应用程序 我有一个简单的测试布局。一个main窗口,btnMain,frame1,page1和btnPage1. 如果btnPage1click事件正忙于background worker(正在下载某些内容),在后台worker从第1页完成之前,阻止用户在主窗口上单击btnMain的最佳方法是什么 添加*:我可以使用NavigationService.Navigating事件在backgroundworker为false(完成)之前警告用户吗?我该怎么做 如果您有多个控件

WPF vb.net桌面应用程序

我有一个简单的测试布局。一个
main窗口,btnMain,frame1,page1
btnPage1.

如果
btnPage1
click事件正忙于
background worker
(正在下载某些内容),在后台worker从第1页完成之前,阻止用户在
主窗口上单击
btnMain
的最佳方法是什么


添加*:我可以使用NavigationService.Navigating事件在backgroundworker为false(完成)之前警告用户吗?我该怎么做

如果您有多个控件需要禁用,请将页面上的所有控件包装为一个

它是WPF工具包的一部分,您可以这样使用它:

<xctk:BusyIndicator IsBusy="{Binding IsBusy}" >
        <ContentControl Style="{StaticResource SampleContent}"/>
</xctk:BusyIndicator>

IsBusy
(视图模型上的属性)为true时,这将禁用其中的所有内容

因此,在开始下载时将其设置为
true
,并在下载完成事件中将其重置为
false

该控件有一个
BusyContent
属性,可用于显示自定义消息。您甚至可以自定义消息内容以显示下载进度:


禁用btnMain并在backgroundworker完成任务时重新启用它。我认为下载按钮上会出现失焦事件,但当backgroundworker为true时,该按钮被隐藏。当backgroundworker为true时,我确实有一个取消按钮。我可以试试。然而,我只是不知道这最好的选择是什么?@BenjaminJones当你失去注意力的时候,你为什么要这么做?在触发BGW completed事件时,单击
btnPage1
禁用
btnMain
,启用
btnMain
。就是这样。如果负责下载触发的按钮是隐藏的,用户也不能点击它。这是你的选择-隐藏或禁用。虽然我认为禁用按钮不会让用户感到困惑,但他仍然知道下载是可能的,但不是正确的now@BenjaminJones它非常简单,可以通过编程禁用所有按钮,甚至整个表单。只需遍历整个控制树即可禁用所有按钮。