使用循环ProgressBar在图像周围获取扩展的Splashscreen

时间:2016-06-24 17:20:00

标签: xaml win-universal-app uwp windows-10-universal template10

我正在使用模板10,并希望我的启动画面看起来像这样:

enter image description here

enter image description here

enter image description here

我已经获得了循环进度条形控件Here,并通过此代码中的Grace Feng帮助获取了图像Link

现在我希望这个循环进度控制到我的启动画面,所以它看起来像上面的图像,但在扩展的启动画面链接教程中,他们通过画布显示它,我想通过Myprogress控制任何想法如何实现这一点控制在扩展的启动画面。如果我只是在splash.xaml中使用它,那么我的应用程序构建并启动但然后它挂起。但删除此控件它运行完美。任何帮助将不胜感激。 谢谢。

在Grace Feng中获取此错误示例: Error

Error2

1 个答案:

答案 0 :(得分:1)

  

但是在扩展的初始屏幕链接教程中,他们通过画布显示它,我想通过Myprogress控制任何想法如何在扩展的闪屏中实现此控件。

虽然它使用official document中的Canvas来显示扩展初始屏幕的内容,但是不需要编码与文档完全相同的代码,文档中的代码仅用于示例。即使您不需要为扩展的启动画面创建新的空白页面,也可以创建UserControl来执行此操作。

有关使用Extended Splash Screen in Template 10的一些信息,请参阅Template10: a new template to create Universal Windows apps – The basics

所以这是我的例子,我创建了一个名为UserControl的{​​{1}}:

ExtendedSplash

后面的代码非常简单,只需处理循环进度条的TimeTikcer:

<Grid Background="#00b2f0">
    <mycontrols:RoundProgressControl x:Name="ProgressControl" HorizontalAlignment="Center" VerticalAlignment="Center"
                                     Size="300" LineWidth="8" Color="Orange" />
</Grid>

要使用此public sealed partial class ExtendedSplash : UserControl { private Timer TheTimer = null; private object LockObject = new object(); private double ProgressAmount = 0; public ExtendedSplash() { this.InitializeComponent(); this.Loaded += (sender, e) => { TimerCallback tcb = HandleTimerTick; TheTimer = new Timer(HandleTimerTick, null, 0, 30); }; this.Unloaded += (sender, e) => { lock (LockObject) { if (TheTimer != null) TheTimer.Change(Timeout.Infinite, Timeout.Infinite); TheTimer = null; } }; } public void HandleTimerTick(Object state) { lock (LockObject) { ProgressControl.SetBarLength(ProgressAmount); ProgressAmount += 0.006; if (ProgressAmount > 1.5) ProgressAmount = 0.0; } } } ,您可以在App.xaml.cs文件代码中这样:

ExtendedSplash

我在上面提供的博客中解释了使用sealed partial class App : Template10.Common.BootStrapper { public App() { InitializeComponent(); SplashFactory = e => new ExtendedSplash(); } public override async Task OnInitializeAsync(IActivatedEventArgs args) { await Task.CompletedTask; } public override async Task OnStartAsync(StartKind startKind, IActivatedEventArgs args) { await Task.Delay(TimeSpan.FromSeconds(6)); NavigationService.Navigate(typeof(Views.MainPage)); } } 的原因。你可以找到我的sample here

<强>更新

首先,这个错误代码不是我的代码,这是你提供的循环进度条。这是一个基于COM的API错误代码。错误消息非常明确:消息过滤器指示应用程序正忙。如你所说,&#34;当它处于挂机状态&#34;时,发生了这个错误。

一种处理此异常的简单方法,您可以添加&#34;尝试catch&#34;像这样的代码:

SplashFactory