mirror of
https://github.com/jayfunc/BetterLyrics.git
synced 2026-01-13 03:34:55 +08:00
134 lines
4.8 KiB
C#
134 lines
4.8 KiB
C#
using BetterLyrics.WinUI3.Enums;
|
||
using Microsoft.UI.Xaml;
|
||
using Microsoft.UI.Xaml.Controls;
|
||
using Microsoft.UI.Xaml.Media;
|
||
|
||
// To learn more about WinUI, the WinUI project structure,
|
||
// and more about our project templates, see: http://aka.ms/winui-project-info.
|
||
|
||
namespace BetterLyrics.WinUI3.Controls;
|
||
|
||
public sealed partial class ImageSwitcher : UserControl
|
||
{
|
||
public int CornerRadiusAmount
|
||
{
|
||
get { return (int)GetValue(CornerRadiusAmountProperty); }
|
||
set { SetValue(CornerRadiusAmountProperty, value); }
|
||
}
|
||
|
||
public static readonly DependencyProperty CornerRadiusAmountProperty =
|
||
DependencyProperty.Register(nameof(CornerRadiusAmount), typeof(int), typeof(ImageSwitcher), new PropertyMetadata(0));
|
||
|
||
public int ShadowAmount
|
||
{
|
||
get { return (int)GetValue(ShadowAmountProperty); }
|
||
set { SetValue(ShadowAmountProperty, value); }
|
||
}
|
||
|
||
public static readonly DependencyProperty ShadowAmountProperty =
|
||
DependencyProperty.Register(nameof(ShadowAmount), typeof(int), typeof(ImageSwitcher), new PropertyMetadata(0));
|
||
|
||
public ImageSource? Source
|
||
{
|
||
get { return (ImageSource?)GetValue(SourceProperty); }
|
||
set { SetValue(SourceProperty, value); }
|
||
}
|
||
|
||
public static readonly DependencyProperty SourceProperty =
|
||
DependencyProperty.Register(nameof(Source), typeof(ImageSource), typeof(ImageSwitcher), new PropertyMetadata(null, OnDependencyPropertyChanged));
|
||
|
||
public ImageSwitchType SwitchType
|
||
{
|
||
get { return (ImageSwitchType)GetValue(SwitchTypeProperty); }
|
||
set { SetValue(SwitchTypeProperty, value); }
|
||
}
|
||
|
||
public static readonly DependencyProperty SwitchTypeProperty =
|
||
DependencyProperty.Register(nameof(SwitchType), typeof(ImageSwitchType), typeof(ImageSwitcher), new PropertyMetadata(ImageSwitchType.Crossfade));
|
||
|
||
public ImageSwitcher()
|
||
{
|
||
InitializeComponent();
|
||
}
|
||
|
||
private void UpdateSource()
|
||
{
|
||
switch (SwitchType)
|
||
{
|
||
case ImageSwitchType.Crossfade:
|
||
UpdateSourceCrossfade();
|
||
break;
|
||
case ImageSwitchType.Slide:
|
||
UpdateSourceSlide();
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
private void UpdateSourceCrossfade()
|
||
{
|
||
// Ϊ<><CEAA><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD>þ<EFBFBD>Դ
|
||
LastAlbumArtImage.Source = AlbumArtImage.Source;
|
||
// ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>
|
||
LastAlbumArtImage.TranslationTransition = null;
|
||
LastAlbumArtImage.OpacityTransition = null;
|
||
LastAlbumArtImage.Translation = new();
|
||
LastAlbumArtImage.Opacity = 1;
|
||
LastAlbumArtImage.OpacityTransition = new ScalarTransition { Duration = Constants.Time.AnimationDuration };
|
||
|
||
// ʹǰ<CAB9><C7B0>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>
|
||
AlbumArtImage.TranslationTransition = null;
|
||
AlbumArtImage.OpacityTransition = null;
|
||
AlbumArtImage.Translation = new();
|
||
AlbumArtImage.Opacity = 0;
|
||
AlbumArtImage.OpacityTransition = new ScalarTransition { Duration = Constants.Time.AnimationDuration };
|
||
// ֮<><D6AE>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
||
AlbumArtImage.Source = Source;
|
||
|
||
// <20><><EFBFBD>浭<EFBFBD><E6B5AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
LastAlbumArtImage.Opacity = 0;
|
||
AlbumArtImage.Opacity = 1;
|
||
}
|
||
|
||
private void UpdateSourceSlide()
|
||
{
|
||
// Ϊ<><CEAA><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD>þ<EFBFBD>Դ
|
||
LastAlbumArtImage.Source = AlbumArtImage.Source;
|
||
// ʹ<><CAB9><EFBFBD><EFBFBD>λ
|
||
LastAlbumArtImage.TranslationTransition = null;
|
||
LastAlbumArtImage.OpacityTransition = null;
|
||
LastAlbumArtImage.Translation = new();
|
||
LastAlbumArtImage.Opacity = 1;
|
||
LastAlbumArtImage.TranslationTransition = new Vector3Transition { Duration = Constants.Time.AnimationDuration };
|
||
LastAlbumArtImage.OpacityTransition = new ScalarTransition { Duration = Constants.Time.AnimationDuration };
|
||
|
||
// ʹǰ<CAB9><C7B0>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>
|
||
AlbumArtImage.TranslationTransition = null;
|
||
AlbumArtImage.OpacityTransition = null;
|
||
AlbumArtImage.Translation = new(-(float)ActualWidth, 0, 0);
|
||
AlbumArtImage.Opacity = 0;
|
||
AlbumArtImage.TranslationTransition = new Vector3Transition { Duration = Constants.Time.AnimationDuration };
|
||
AlbumArtImage.OpacityTransition = new ScalarTransition { Duration = Constants.Time.AnimationDuration };
|
||
// ֮<><D6AE>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
||
AlbumArtImage.Source = Source;
|
||
|
||
// <20><><EFBFBD><EFBFBD>
|
||
LastAlbumArtImage.Opacity = 0;
|
||
AlbumArtImage.Opacity = 1;
|
||
LastAlbumArtImage.Translation = new(-(float)ActualWidth, 0, 0);
|
||
AlbumArtImage.Translation = new();
|
||
}
|
||
|
||
private static void OnDependencyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||
{
|
||
if (d is ImageSwitcher imageSwitcher)
|
||
{
|
||
if (e.Property == SourceProperty)
|
||
{
|
||
imageSwitcher.UpdateSource();
|
||
}
|
||
}
|
||
}
|
||
}
|