using System; using System.Threading.Tasks; using System.Windows; using System.Windows.Media; using System.Windows.Media.Animation; namespace FasdDesktopUi.Pages.LevelUpPage { public partial class LevelUpPage : Window { public int NewLevel { get { return (int)GetValue(NewLevelProperty); } set { SetValue(NewLevelProperty, value); } } public static readonly DependencyProperty NewLevelProperty = DependencyProperty.Register(nameof(NewLevel), typeof(int), typeof(LevelUpPage), new PropertyMetadata(0, new PropertyChangedCallback(HandleLevelChanged))); private static void HandleLevelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (!(d is LevelUpPage levelupPage)) return; levelupPage.LastLevelTextBlock.Text = (levelupPage.NewLevel - 1).ToString(); levelupPage.NewLevelTextBlock.Text = levelupPage.NewLevel.ToString(); } public string LevelTitle { get { return (string)GetValue(LevelTitleProperty); } set { SetValue(LevelTitleProperty, value); } } public static readonly DependencyProperty LevelTitleProperty = DependencyProperty.Register(nameof(LevelTitle), typeof(string), typeof(LevelUpPage), new PropertyMetadata("string.Empty")); public LevelUpPage() { InitializeComponent(); } private async Task AnimateText() { await Task.Delay(900); double animationDistance = NewLevelTextBlock.ActualHeight + NewLevelTextBlock.Margin.Top + NewLevelTextBlock.Margin.Bottom; Duration duration = TimeSpan.FromMilliseconds(500); DoubleAnimation lowerAnimation = new DoubleAnimation { From = 0, To = -animationDistance, Duration = duration, EasingFunction = new CubicEase { EasingMode = EasingMode.EaseInOut } }; DoubleAnimation upperAnimation = new DoubleAnimation { From = 0, To = -animationDistance, Duration = duration, EasingFunction = new CubicEase { EasingMode = EasingMode.EaseInOut } }; LowerTransform.BeginAnimation(TranslateTransform.YProperty, lowerAnimation); UpperTransform.BeginAnimation(TranslateTransform.YProperty, upperAnimation); } private async void HandleVisibilityChanged(object sender, DependencyPropertyChangedEventArgs e) { if (Visibility != Visibility.Visible) return; await AnimateText(); } private void Continue_Click(object sender, RoutedEventArgs e) { Close(); } } }