しかし、拡張スプラッシュ スクリーン リンク チュートリアルでは、キャンバスで表示されます。このコントロールを拡張スプラッシュ スクリーンに実装する方法については、Myprogress コントロールで実行したいと考えています。
拡張スプラッシュ スクリーンのコンテンツを表示するために公式ドキュメントで使用Canvas
されていますが、ドキュメントとまったく同じようにコーディングする必要はありません。ドキュメント内のコードは単なる例です。拡張スプラッシュ スクリーン用に新しい空白ページを作成する必要はありませんが、これを行うために を作成することもできます 。UserControl
の使用に関する情報については、「 Template10: ユニバーサル Windows アプリを作成するための新しいテンプレート - 基本Extended Splash Screen in Template 10
」を参照してください。
これが私の例です。UserControl
名前付きを作成しましたExtendedSplash
:
<Grid Background="#00b2f0">
<mycontrols:RoundProgressControl x:Name="ProgressControl" HorizontalAlignment="Center" VerticalAlignment="Center"
Size="300" LineWidth="8" Color="Orange" />
</Grid>
コード ビハインドは非常に単純で、円形のプログレス バーの TimeTikcer を処理するだけです。
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;
}
}
}
これを使用するExtendedSplash
には、App.xaml.cs ファイル コードで次のようにします。
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));
}
}
使用する理由SplashFactory
は、上記のブログで説明されています。私のサンプルはこちらにあります。
アップデート:
まず、このエラー コードは私のコードではありません。提供された円形のプログレス バーです。これは COM ベースの API エラー コードです。エラー メッセージは非常に明確です。メッセージ フィルタは、アプリケーションがビジーであることを示しました。「吊るした状態で」とのことでしたが、このエラーが発生しました。
この例外を処理する簡単な方法として、次のように「try catch」をこのコードに追加できます。
public void SetBarLength(double Value)
{
try
{
if (DesignMode.DesignModeEnabled)
SetBarLengthUI(Value);
else if (CoreApplication.MainView.CoreWindow.Dispatcher.HasThreadAccess)
SetBarLengthUI(Value);
else
{
double LocalValue = Value;
IAsyncAction IgnoreMe = CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { SetBarLengthUI(Value); });
}
}
catch (Exception e)
{
Debug.WriteLine(e.ToString());
}
}