主窗体加载Page页滑动并且淡入/淡出显示,这个思路是引用老外的方法
public PageAnimation PageLoadAnimation { get; set; } = PageAnimation.SlideAndFadeInFromRight;
public PageAnimation PageUnloadAnimation { get; set; } = PageAnimation.SlideAndFadeOutToLeft;
public float SlideSeconds { get; set; } = 1f;
public bool ShouldAnimateOut { get; set; }
PageLoadAnimation 加载是从右,PageUnloadAnimation 卸载到左,SlideSeconds 时间秒
public static class FrameworkElementAnimations
{
#region Slide In / Out
public static async Task SlideAndFadeInAsync(this FrameworkElement element, AnimationSlideInDirection direction, float seconds = 0.3f, bool keepMargin = true, int size = 0)
{
var sb = new Storyboard();
switch (direction)
{
case AnimationSlideInDirection.Left:
sb.AddSlideFromLeft(seconds, size == 0 ? element.ActualWidth : size, keepMargin: keepMargin);
break;
case AnimationSlideInDirection.Right:
sb.AddSlideFromRight(seconds, size == 0 ? element.ActualWidth : size, keepMargin: keepMargin);
break;
case AnimationSlideInDirection.Top:
sb.AddSlideFromTop(seconds, size == 0 ? element.ActualWidth : size, keepMargin: keepMargin);
break;
case AnimationSlideInDirection.Bottom:
sb.AddSlideFromBottom(seconds, size == 0 ? element.ActualWidth : size, keepMargin: keepMargin);
break;
}
sb.AddFadeIn(seconds);
sb.Begin(element);
element.Visibility = Visibility.Visible;
await Task.Delay((int) (seconds * 1000));
}
public static async Task SlideAndFadeOutAsync(this FrameworkElement element, AnimationSlideInDirection direction, float seconds = 0.3f, bool keepMargin = true, int size = 0)
{
var sb = new Storyboard();
switch (direction)
{
case AnimationSlideInDirection.Left:
sb.AddSlideToLeft(seconds, size == 0 ? element.ActualWidth : size, keepMargin: keepMargin);
break;
case AnimationSlideInDirection.Right:
sb.AddSlideToRight(seconds, size == 0 ? element.ActualWidth : size, keepMargin: keepMargin);
break;
case AnimationSlideInDirection.Top:
sb.AddSlideToTop(seconds, size == 0 ? element.ActualWidth : size, keepMargin: keepMargin);
break;
case AnimationSlideInDirection.Bottom:
sb.AddSlideToBottom(seconds, size == 0 ? element.ActualWidth : size, keepMargin: keepMargin);
break;
}
sb.AddFadeOut(seconds);
sb.Begin(element);
element.Visibility = Visibility.Visible;
await Task.Delay((int) (seconds * 1000));
}
#endregion
#region Fade In / Out
public static async Task FadeInAsync(this FrameworkElement element, bool firstLoad, float seconds = 0.3f)
{
var sb=new Storyboard();
sb.AddFadeIn(seconds);
sb.Begin(element);
element.Visibility = Visibility.Visible;
await Task.Delay((int) (seconds * 1000));
}
public static async Task FadeOutAsync(this FrameworkElement element, float seconds = 0.3f)
{
var sb=new Storyboard();
sb.AddFadeOut(seconds);
sb.Begin(element);
element.Visibility = Visibility.Visible;
await Task.Delay((int) (seconds * 1000));
element.Visibility = Visibility.Collapsed;
}
#endregion
}
定义枚举类型,再通过不同类型,Storyboard类的属性更改。由于工作比较忙,需要代码可以私信我。