如何表示" loading"在GUI中

时间:2016-06-24 16:21:02

标签: c# wpf

用户确认关机后,我的应用程序需要将近4秒才能完全关闭。我试图在3秒内向用户展示一些活动并可能取得进展。因此场景类似于

  

ButtonClose_Click() - >你确定要离开? - >是的 - >   "关闭"

我试图只显示一个窗口(消息框),但我使用的是DevExpress窗口,它们是OkCancelOkYesNoYesNoCancel所以基本上它需要要继续的用户输入:

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);
}

我怎么能接近这个?

3 个答案:

答案 0 :(得分:1)

您可以使用WPF Toolkit Busy Indicator:

https://wpftoolkit.codeplex.com/wikipage?title=BusyIndicator&referringTitle=Home

使用指示器包装控件,然后在长时间运行的过程中将绑定标志设置为True。

答案 1 :(得分:1)

这是一个简单繁忙的指标,我已经使用了几次。您只需要在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>

以下是它的样子: Here is what it looks like.

答案 2 :(得分:1)

我使用MahApps.Metro的ProgressRing。

http://mahapps.com/controls/progress-ring.html

代码是开源的,或者您可以使用Nuget获取二进制文件。