【问题标题】:How should I indicate progress in a Windows Phone 7 app if I'm not going to show the SystemTray?如果我不打算显示 SystemTray,我应该如何指示 Windows Phone 7 应用程序的进度?
【发布时间】:2016-12-02 17:01:57
【问题描述】:

我的 WP7 应用程序中有几个操作需要向最终用户表明需要一段时间。

在 Android 世界中,我会调用 ProgressDialog,它会导致屏幕变暗,并在屏幕中间显示特定于手机的微调器动画以及我想要的任何消息。

一些搜索表明在 Windows Phone 7(Mango,无论如何)中执行此操作的正确方法是使用 ProgressIndicator,所以我沿着这条路走。

问题是在我的应用程序中我不想看到系统托盘。我将它隐藏在 XAML 中,我想使用整个 800x480,并且尽可能接近我可以告诉 ProgressIndicator 不会飞,除非有一个可见的 SystemTray。

有没有办法在没有 SystemTray 的情况下使用 ProgressIndicator? (即,它以半透明的方式显示在应用程序的顶部,然后消失)如果不这样做,是否有任何其他预定义和既定的方式来指示 WP7 中的 ProgressDialog 之类的东西?

【问题讨论】:

    标签: windows-phone-7 progressdialog


    【解决方案1】:

    Coding4Fun 有一个包含适用于 Windows Phone 7 的工具的库。该工具包包含 ProgressOverlay 控件。基本上,当您向它添加 dll 引用并在 XAML 文件中添加引用时,您可以执行以下操作:

    <Controls:ProgressOverlay Name="progressOverlay" Margin="0" >
        <Controls:ProgressOverlay.Content>
            <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
                <ProgressBar IsIndeterminate="true" x:Name="customIndeterminateProgressBar" Style="{StaticResource CustomIndeterminateProgressBar}" />
            </StackPanel>
        </Controls:ProgressOverlay.Content>
    </Controls:ProgressOverlay>
    

    这会在您的布局上放置一个叠加层,并在屏幕中间显示 ProgressBar。如果需要,您可以自己在 StackPanel 中添加控件。例如,带有文本“正在加载...”的 TextBlock。你可以在CodePlex找到下载。

    希望这会有所帮助!

    【讨论】:

    • 这是一个非常糟糕的主意,因为非本地进度指示器的性能非常糟糕,并且在 Tango 上的性能会更差。
    • @ClausJørgensen 物有所值我基本上是在使用它来掩盖 Web 服务调用的时间,并且该应用程序没有做任何处理器密集型的事情。
    【解决方案2】:

    您可以简单地使用 KraZ88 显示的进度条。

    只需将“ProgressBar”控件从工具箱拖到您的页面。如果您可以看到此内容,请右键单击工具箱并选择“选择项目”。下一个对话框显示您可以使用但尚未使用的控件列表! :)。检查那里的“ProgressBar”控件,然后单击“确定”。

    现在您将能够看到“ProgressBar”。

    现在,Windows Phone 7.1 有两种选择:

    • 向用户显示进度的“不确定”视图。这意味着,他可能不知道还有多少工作要做,但他知道工作正在进行中。

    这可以通过简单地将 Visibility 属性初始设置为 Collapsed 并在您的工作开始时将其设置为 Visible 来实现。接下来,设置 IsIndeterminate = true。你的工作已经完成了一半。现在只需设置 progressBar1.Value += progressBar1.SmallChange;

    • 下一种方法是借助计算向用户显示进度的准确视图。这意味着在工作的每个迭代单元之后重新计算剩余的进度。

    为此,您需要设置IsIndeterminate = false,然后根据您的依赖关系设置进度条的最大值和最小值,然后在每次迭代后重新设置进度条的值.这是一个开始的例子:

    ProgressBar1.Maximum=array.Length;
    ProgressBar1.Minimum=0;
    
    for(int i =0;i<array.Lenght;i++)
    {//some logic
    progressBar1.Value +=1;
    }
    

    【讨论】:

    【解决方案3】:

    您可以通过这种方式简单地使用没有 SystemTray 的 ProgessBar:

    <ProgressBar IsEnabled="True" Height="5" Width="480"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-31
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多