1

テンプレート 10 を使用しており、スプラッシュ スクリーンを次のように表示したいと考えています。

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

ここに円形の進行状況バー コントロールがあり、このコードから Grace Feng の助けを借りて画像の周りにそれを取得しましたリンク

今、私はこのラウンド プログレス コントロールをスプラッシュ スクリーンに入れたいので、上の画像のように見えますが、拡張スプラッシュ スクリーン リンク チュートリアルでは、キャンバスで表示され、このコントロールを拡張で実装する方法を Myprogress コントロールで実行したいと考えています。スプラッシュ スクリーン。splash.xaml で使用するだけで、アプリがビルドされて起動しますが、ハングします。しかし、このコントロールを削除すると、完全に実行されます。ありがとうございました。

Grace Feng サンプルでこのエラーを取得します。 エラー

エラー2

4

1 に答える 1

1

しかし、拡張スプラッシュ スクリーン リンク チュートリアルでは、キャンバスで表示されます。このコントロールを拡張スプラッシュ スクリーンに実装する方法については、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());
    }
}
于 2016-06-27T07:32:38.133 に答える