【发布时间】:2015-04-01 02:02:32
【问题描述】:
我正在为 Windows 8.1 和 Windows Phone 8.1 开发“通用应用程序”
我需要在我的页面中添加一个ProgressRing 控件,因为有一个任务需要一些时间才能完成,我应该通知用户该应用正在加载数据。所以我按照以下链接中关于 MDSN 的说明进行操作:
To create an indeterminate progress ring 他们说出了我真正需要的东西:
4.添加不确定的进度环
当您无法估计完成一项任务还有多少工作量以及 任务确实阻止用户交互,使用不确定的进度环。 一个不确定的进度环显示一个动画点序列 绕圈移动。
问题是ProgressRing没有播放“加载”的动画,当我在启动任务的代码之前插入prog.IsActive = true;
如果我注释任务代码行,它会播放。
XAML:
<ProgressRing x:Name="prog" Margin="435,349,388,181" FontFamily="{StaticResource FontFamily6}" FontSize="25" />
C#:
private void LevelTap(object sender, TappedRoutedEventArgs e)
{
prog.IsActive = true;
CheckNav(sender);
}
private void CheckNav(object sender)
{
TextBlock tb = sender as TextBlock;
GameSetter game = new GameSetter();
game.Level = (int)TextDict[tb];
if (!LevelsArr[game.Level]) return;
if (!goToLeader)
{
prog.IsActive = false;
CallNav(true, game);
}
else
{
prog.IsActive = false;
CallNav(false, game);
}
}
private void CallNav(bool b,GameSetter g)
{
if(b) Frame.Navigate(typeof(Game8), g);
else Frame.Navigate(typeof(MainPage), g);
}
注意:运行的任务最后使用Dictionary、Windows.Storage.ApplicationData和Navigation作为另一个页面。
【问题讨论】:
-
嗯,让我猜猜,
GameSetter game = new GameSetter();需要很长时间,对吧? -
@kennyzx 不完全是,构造函数实际上什么也没做,它只有 3 个属性。
-
所以在您启动进度环后,您可以通过设置
prog.IsActive = false;立即停止它 - 因为似乎没有任何步骤是耗时的。 -
@kennyzx 我想出了一个主意,当
ProgressRing启动时实现一个计时器,0.5 秒后它会启动任务,这样就成功了,但是,这不是我喜欢的编码方式。 -
好的,应该可以,至少 ProgressRing 会显示半秒。但首先检查代码的性能,使用
Stopwatcher计算每行花费的时间。如果游戏加载确实不慢,你就不需要这个ProgressRing。
标签: c# xaml windows-phone-8.1