public async Task Show(View relative, string text, TimeSpan?duration = null) { _ = relative ?? throw new ArgumentNullException(nameof(relative)); if (text.IsEmpty()) { return; } Content.Text(text); duration ??= 1500.Milliseconds(); UIWorkBatch.RunSync(() => { X.BindTo(relative.Width, Width, (rw, w) => (relative.CalculateAbsoluteX() + (rw / 2)) - (w / 2)); Y.BindTo(relative.Height, rh => relative.CalculateAbsoluteY() + rh); }); this.Visible(); CancellationSource?.Cancel(); CancellationSource?.Dispose(); CancellationSource = new(); await Task.Delay(duration.Value, CancellationSource.Token) .ContinueWith((_) => this.Hide(), CancellationSource.Token); }
static void HandleNavigationAnimationStarted(NavigationEventArgs args) { if (Tabs == null) return; if (args.From is PopUp || args.To is PopUp) return; var showTabs = args.To is NavBarTabsPage<TTabs>; var shouldFadeIn = showTabs && !(args.From is NavBarTabsPage<TTabs>); var shouldFadeOut = args.From is NavBarTabsPage<TTabs> && !showTabs; if (shouldFadeIn) AnimateTabsIn(); else if (shouldFadeOut) AnimateTabsOut(); else UIWorkBatch.RunSync(() => Tabs?.Visible(showTabs).Opacity(showTabs ? 1 : 0)); }
internal static void Disappear(bool animate = false) { if (animate) { var ani = Animation.Create(Current, Animation.DefaultDuration, AnimationEasing.Linear, change: x => x.Opacity(0)) .OnCompleted(() => { Current.Hide(); Current.SendToBack(); }); Current.Animate(ani).RunInParallel(); } else { UIWorkBatch.RunSync(() => Current.Hide().Opacity(0)); Current.SendToBack(); } }
internal static void Appear(bool animate = false) { if (Current.Parent == null) { return; } Current.BringToFront(); if (animate) { Current.Animate(Animation.DefaultDuration, AnimationEasing.Linear, x => x.Visible().Opacity(0), x => x.Opacity(1)) .RunInParallel(); } else { UIWorkBatch.RunSync(() => Current.Visible().Opacity(1)); } }