aber im erweiterten Begrüßungsbildschirm Link Tutorial sie es durch Leinwand zeigen, und ich will es tun, indem Myprogress eine Idee steuern, wie um dieses Steuerelement im erweiterten Begrüßungsbildschirm zu implementieren.
Obwohl es Canvas
im official document verwendet den Inhalt des erweiterten Begrüßungsbildschirm anzuzeigen, besteht keine Notwendigkeit, wie das Dokument genau gleiche zu codieren, ist der Code im Dokument nur ein Beispiel. Auch wenn Sie keine neue leere Seite für einen erweiterten Begrüßungsbildschirm erstellen müssen, können Sie hierfür auch eine UserControl
erstellen.
Weitere Informationen zur Verwendung von Extended Splash Screen in Template 10
finden Sie unter Template10: a new template to create Universal Windows apps – The basics.
mein Beispiel Also hier ist, habe ich eine UserControl
namens ExtendedSplash
:
<Grid Background="#00b2f0">
<mycontrols:RoundProgressControl x:Name="ProgressControl" HorizontalAlignment="Center" VerticalAlignment="Center"
Size="300" LineWidth="8" Color="Orange" />
</Grid>
Der Code hinter ist sehr einfach nur die TimeTikcer des Kreis progressbar Handhabung:
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;
}
}
}
Um dieses ExtendedSplash
zu verwenden , können Sie in der App.xaml.cs Dateicode wie folgt:
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));
}
}
Der Grund, warum SplashFactory
verwendet wird, wird in dem oben angegebenen Blog erläutert. Und Sie können meine sample here finden.
Update:
Zu allererst dieser Code Fehler ist nicht mein Code, das Ihr bereitgestellt Kreisfortschrittsbalken ist. Und das ist ein COM-basierter API-Fehlercode. Die Fehlermeldung ist ziemlich klar: Der Nachrichtenfilter zeigte an, dass die Anwendung beschäftigt ist. Wie Sie sagten, "während es sich im erhängten Zustand befindet", ist dieser Fehler aufgetreten.
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());
}
}
Wenn Sie das Debugger verwenden, wird es in Ihrem Statusanzeige eines Ihrer Code zeigen jemals bekommen:
Eine einfache Möglichkeit, diese Ausnahme zu behandeln, können Sie eine „versuchen fangen“ auf diesen Code wie folgt hinzufügen namens? Wird der Abweisungshandler Ihres Codes aufgerufen? Auch für andere, die diese Frage lesen, finden Sie das Tutorial referenziert hier https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh868191.aspx?f=255&MSPPError=-2147217396 – Joel