C# 如何代表;“装载”;在GUI中
在用户确认关闭后,我的应用程序几乎需要4秒钟才能完全关闭。我试图在这3秒内向用户展示一些活动和可能的进展。因此,这种情况类似于 按钮关闭单击()->确实要退出吗?->是-> “结束” 我试图只显示一个窗口(messagebox),但我使用的是DevXPress窗口,它们是C# 如何代表;“装载”;在GUI中,c#,wpf,C#,Wpf,在用户确认关闭后,我的应用程序几乎需要4秒钟才能完全关闭。我试图在这3秒内向用户展示一些活动和可能的进展。因此,这种情况类似于 按钮关闭单击()->确实要退出吗?->是-> “结束” 我试图只显示一个窗口(messagebox),但我使用的是DevXPress窗口,它们是OkCancel、Ok、YesNo和YesCancel,因此基本上需要用户输入才能继续: Application.Current.Dispatcher.Invoke( () => { DXM
OkCancel
、Ok
、YesNo
和YesCancel
,因此基本上需要用户输入才能继续:
Application.Current.Dispatcher.Invoke(
() =>
{
DXMessageBox.Show(Application.Current.MainWindow,
"Text Here..", "Title Here.. ", MessageBoxButton.OKCancel, MessageBoxImage.Information); // Ok by Default
});
这就是我所拥有的:
var result = DXMessageBox.Show(Application.Current.MainWindow,
"Are you sure you want to EXIT the application?",
"Attention", MessageBoxButton.OKCancel, MessageBoxImage.);
if (result == MessageBoxResult.OK)
{
//
// I want to show or display some "loading" activity here till the below code finishes executing"
//
mainViewModel.SaveDatabase(); // save database+
mainViewModel.CaptureViewModel.cameraController.TurnCameraLights(false, false, false); // turn off some lights
mainViewModel.CaptureViewModel.Uninitialize(); // clear stuff
Environment.Exit(0);
}
我怎样才能做到这一点呢?您可以使用WPF工具箱繁忙指示器:
使用指示器包装控件,然后在长时间运行的进程期间将绑定标志设置为True。您可以使用WPF Toolkit忙碌指示器:
用指示器包装控件,然后在长时间运行的进程期间将绑定标志设置为True。这里是一个简单的繁忙指示器,我已经使用过几次。您只需要在viewmodel中设置一个属性IsBusy。只需将其放在其余控件的顶部 最好的是,当您在设计视图中编辑时,它不会显示在您的控件上
<Grid>
<!--all of your controls-->
<!--Loading Indicator-->
<Border x:Name="_LoadingIndicator" Background="#AA000000">
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Red" FontSize="80">Loading...</TextBlock>
<Border.Style>
<Style TargetType="Border">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsBusy}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</Grid>
加载。。。
下面是它的外观:
这是一个简单的忙指示器,我已经用过几次了。您只需要在viewmodel中设置一个属性IsBusy。只需将其放在其余控件的顶部 最好的是,当您在设计视图中编辑时,它不会显示在您的控件上
<Grid>
<!--all of your controls-->
<!--Loading Indicator-->
<Border x:Name="_LoadingIndicator" Background="#AA000000">
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Red" FontSize="80">Loading...</TextBlock>
<Border.Style>
<Style TargetType="Border">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsBusy}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</Grid>
加载。。。
下面是它的外观:
我使用MahApps.Metro中的ProgressRing
代码是开源的,或者您可以使用Nuget获取二进制文件。我使用MahApps.Metro中的ProgressRing
代码是开源的,或者您可以使用Nuget获取二进制文件。标准忙碌光标有什么问题?@Cody这是个好主意,但没有鼠标。这是一个触摸应用程序,用于桌面。标准忙碌光标有什么问题?@Cody这是个好主意,但没有鼠标。这是一个触摸应用程序,在桌面上使用。我试过了,可以作为应用程序关闭的指示。但如果我有几个观点呢?我需要在每个xaml和viewModel上添加它,对吗?您需要将它添加到任何要显示“加载…”指示器的窗口中。我打赌你可能会在默认情况下创建一个具有该属性的控件…我尝试过,可以将其用作应用程序正在关闭的指示。但如果我有几个观点呢?我需要在每个xaml和viewModel上添加它,对吗?您需要将它添加到任何要显示“加载…”指示器的窗口中。我打赌你可能会创建一个默认具有该属性的控件。。。