diff --git a/UntamedMusicPlayer/MainWindow.xaml b/UntamedMusicPlayer/MainWindow.xaml
index 3ce9fa3..b3f3a7e 100644
--- a/UntamedMusicPlayer/MainWindow.xaml
+++ b/UntamedMusicPlayer/MainWindow.xaml
@@ -12,8 +12,26 @@
PersistenceId="MainWindow"
mc:Ignorable="d">
-
+
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
diff --git a/UntamedMusicPlayer/MainWindow.xaml.cs b/UntamedMusicPlayer/MainWindow.xaml.cs
index ae71af8..e92cc04 100644
--- a/UntamedMusicPlayer/MainWindow.xaml.cs
+++ b/UntamedMusicPlayer/MainWindow.xaml.cs
@@ -1,3 +1,4 @@
+using System.ComponentModel;
using System.Numerics;
using System.Runtime.InteropServices;
using CommunityToolkit.Mvvm.Messaging;
@@ -12,6 +13,7 @@ using UntamedMusicPlayer.Helpers;
using UntamedMusicPlayer.Messages;
using UntamedMusicPlayer.Models;
using UntamedMusicPlayer.Services;
+using UntamedMusicPlayer.ViewModels;
using UntamedMusicPlayer.Views;
using Windows.System;
using WinRT.Interop;
@@ -25,6 +27,9 @@ public sealed partial class MainWindow : WindowEx, IRecipient
private readonly ILogger _logger = LoggingService.CreateLogger();
private readonly InfoBarManager? _infoBarManager;
private bool _isClosingWorkDone;
+ private readonly Timer _playBarTimer;
+ private bool _playBarTimerEnabled = false;
+ private bool _isPlayBarHidden = false;
// 热键 ID
private const int HOTKEY_ID_VOLUME_UP = 1;
@@ -80,6 +85,98 @@ public sealed partial class MainWindow : WindowEx, IRecipient
// 注册系统级全局热键
Activated += MainWindow_Activated;
+
+ // 初始化播放栏隐藏定时器
+ _playBarTimer = new Timer(TimerTick, null, Timeout.Infinite, Timeout.Infinite);
+
+ Data.RootPlayBarViewModel?.PropertyChanged += RootPlayBarViewModelPropertyChanged;
+ }
+
+ private void RootPlayBarViewModelPropertyChanged(object? sender, PropertyChangedEventArgs e)
+ {
+ if (
+ e.PropertyName
+ is nameof(RootPlayBarViewModel.IsDetail)
+ or nameof(RootPlayBarViewModel.IsFullScreen)
+ )
+ {
+ if (Data.RootPlayBarViewModel!.IsDetail && Data.RootPlayBarViewModel.IsFullScreen)
+ {
+ RootGrid.PointerMoved += RootGrid_PointerMoved;
+ }
+ else
+ {
+ RootGrid.PointerMoved -= RootGrid_PointerMoved;
+ if (_isPlayBarHidden)
+ {
+ ShellFrame.Margin = new Thickness(0, 0, 0, 117);
+ ShowPlayBarStoryboard.Begin();
+ _isPlayBarHidden = false;
+ StopPlayBarTimer();
+ }
+ }
+ }
+ }
+
+ private void RootGrid_PointerMoved(object sender, PointerRoutedEventArgs e)
+ {
+ var pointerPoint = e.GetCurrentPoint(RootGrid);
+ var position = pointerPoint.Position;
+ var height = RootGrid.ActualHeight;
+
+ if (position.Y > height - 117) // 如果鼠标在底部 117 像素范围内
+ {
+ ShellFrame.Margin = new Thickness(0, 0, 0, 117);
+ if (_isPlayBarHidden)
+ {
+ ShowPlayBarStoryboard.Begin();
+ _isPlayBarHidden = false;
+ }
+ StopPlayBarTimer();
+ }
+ else if (!_isPlayBarHidden) // 鼠标离开了底部,开始定时器
+ {
+ StartPlayBarTimer();
+ }
+ }
+
+ private void TimerTick(object? state)
+ {
+ StopPlayBarTimer();
+ DispatcherQueue.TryEnqueue(
+ Microsoft.UI.Dispatching.DispatcherQueuePriority.Low,
+ () =>
+ {
+ if (
+ Data.RootPlayBarViewModel!.IsDetail
+ && Data.RootPlayBarViewModel.IsFullScreen
+ && !_isPlayBarHidden
+ )
+ {
+ ShellFrame.Margin = new Thickness(0);
+ HidePlayBarStoryboard.Begin();
+ _isPlayBarHidden = true;
+ }
+ }
+ );
+ }
+
+ private void StartPlayBarTimer()
+ {
+ if (!_playBarTimerEnabled)
+ {
+ _playBarTimer.Change(TimeSpan.FromSeconds(2), Timeout.InfiniteTimeSpan);
+ _playBarTimerEnabled = true;
+ }
+ }
+
+ private void StopPlayBarTimer()
+ {
+ if (_playBarTimerEnabled)
+ {
+ _playBarTimer.Change(Timeout.Infinite, Timeout.Infinite);
+ _playBarTimerEnabled = false;
+ }
}
///
@@ -317,6 +414,7 @@ public sealed partial class MainWindow : WindowEx, IRecipient
App.GetService().Dispose();
App.GetService().Dispose();
+ _playBarTimer?.Dispose();
}
catch (Exception ex)
{
diff --git a/UntamedMusicPlayer/Views/LyricPage.xaml b/UntamedMusicPlayer/Views/LyricPage.xaml
index 0b669e2..02a2e9a 100644
--- a/UntamedMusicPlayer/Views/LyricPage.xaml
+++ b/UntamedMusicPlayer/Views/LyricPage.xaml
@@ -51,12 +51,29 @@
-
+
+
+
+
+
+
+
+
-
+
-
+
@@ -114,6 +131,9 @@
Height="33"
VerticalAlignment="Center"
Canvas.ZIndex="1" IsHitTestVisible="True">
+
+
+