using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace XFEToolBox.Views.Controls; /// /// Carousel.xaml 的交互逻辑 /// public partial class Carousel : UserControl { private int currentIndex = 0; private bool isMouseOn = false; #region DependencyProperty public List ImageList { get; set; } = []; public ImageSource CurrentImageSource { get { return (ImageSource)GetValue(CurrentImageSourceProperty); } set { SetValue(CurrentImageSourceProperty, value); } } public static readonly DependencyProperty CurrentImageSourceProperty = DependencyProperty.Register("CurrentImageSource", typeof(ImageSource), typeof(Carousel), new PropertyMetadata(null)); public ImageSource AfterImageSource { get { return (ImageSource)GetValue(AfterImageSourceProperty); } set { SetValue(AfterImageSourceProperty, value); } } public static readonly DependencyProperty AfterImageSourceProperty = DependencyProperty.Register("AfterImageSource", typeof(ImageSource), typeof(Carousel), new PropertyMetadata(null)); #endregion public Carousel() { Loaded += Carousel_Loaded; MouseEnter += (s, e) => isMouseOn = true; MouseLeave += (s, e) => isMouseOn = false; MouseMove += (s, e) => isMouseOn = true; InitializeComponent(); } private void Carousel_Loaded(object sender, RoutedEventArgs e) { var timer = new System.Windows.Threading.DispatcherTimer { Interval = TimeSpan.FromSeconds(3) }; timer.Tick += Timer_Tick; timer.Start(); } private void Timer_Tick(object? sender, EventArgs e) { if (!isMouseOn && ImageList.Count > 0) { currentIndex = (currentIndex + 1) % ImageList.Count; CurrentImageSource = ImageList[currentIndex]; } } }