fix:翻页控件不合理的显示时机
This commit is contained in:
@@ -25,6 +25,7 @@ namespace Ink_Canvas.Helpers
|
||||
public event Action<Presentation> PresentationOpen;
|
||||
public event Action<Presentation> PresentationClose;
|
||||
public event Action<bool> PPTConnectionChanged;
|
||||
public event Action<bool> SlideShowStateChanged;
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
@@ -92,6 +93,7 @@ namespace Ink_Canvas.Helpers
|
||||
|
||||
#region Private Fields
|
||||
private Timer _connectionCheckTimer;
|
||||
private Timer _slideShowStateCheckTimer;
|
||||
private Timer _wpsProcessCheckTimer;
|
||||
private Process _wpsProcess;
|
||||
private bool _hasWpsProcessId;
|
||||
@@ -99,6 +101,7 @@ namespace Ink_Canvas.Helpers
|
||||
private int _wpsProcessCheckCount;
|
||||
private WpsWindowInfo _lastForegroundWpsWindow;
|
||||
private DateTime _lastWindowCheckTime = DateTime.MinValue;
|
||||
private bool _lastSlideShowState = false;
|
||||
private readonly object _lockObject = new object();
|
||||
private bool _disposed = false;
|
||||
#endregion
|
||||
@@ -114,6 +117,10 @@ namespace Ink_Canvas.Helpers
|
||||
_connectionCheckTimer = new Timer(500);
|
||||
_connectionCheckTimer.Elapsed += OnConnectionCheckTimerElapsed;
|
||||
_connectionCheckTimer.AutoReset = true;
|
||||
|
||||
_slideShowStateCheckTimer = new Timer(1000);
|
||||
_slideShowStateCheckTimer.Elapsed += OnSlideShowStateCheckTimerElapsed;
|
||||
_slideShowStateCheckTimer.AutoReset = true;
|
||||
}
|
||||
|
||||
public void StartMonitoring()
|
||||
@@ -121,6 +128,7 @@ namespace Ink_Canvas.Helpers
|
||||
if (!_disposed)
|
||||
{
|
||||
_connectionCheckTimer?.Start();
|
||||
_slideShowStateCheckTimer?.Start();
|
||||
LogHelper.WriteLogToFile("PPT监控已启动", LogHelper.LogType.Trace);
|
||||
}
|
||||
}
|
||||
@@ -128,6 +136,7 @@ namespace Ink_Canvas.Helpers
|
||||
public void StopMonitoring()
|
||||
{
|
||||
_connectionCheckTimer?.Stop();
|
||||
_slideShowStateCheckTimer?.Stop();
|
||||
DisconnectFromPPT();
|
||||
LogHelper.WriteLogToFile("PPT监控已停止", LogHelper.LogType.Trace);
|
||||
}
|
||||
@@ -146,6 +155,18 @@ namespace Ink_Canvas.Helpers
|
||||
}
|
||||
}
|
||||
|
||||
private void OnSlideShowStateCheckTimerElapsed(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
CheckSlideShowState();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.WriteLogToFile($"PPT放映状态检查失败: {ex}", LogHelper.LogType.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckAndConnectToPPT()
|
||||
{
|
||||
lock (_lockObject)
|
||||
@@ -187,6 +208,30 @@ namespace Ink_Canvas.Helpers
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckSlideShowState()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!IsConnected) return;
|
||||
|
||||
var currentSlideShowState = IsInSlideShow;
|
||||
if (currentSlideShowState != _lastSlideShowState)
|
||||
{
|
||||
_lastSlideShowState = currentSlideShowState;
|
||||
SlideShowStateChanged?.Invoke(currentSlideShowState);
|
||||
|
||||
if (!currentSlideShowState)
|
||||
{
|
||||
LogHelper.WriteLogToFile("检测到PPT放映已结束", LogHelper.LogType.Trace);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.WriteLogToFile($"检查PPT放映状态异常: {ex}", LogHelper.LogType.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private Microsoft.Office.Interop.PowerPoint.Application TryConnectToPowerPoint()
|
||||
{
|
||||
try
|
||||
@@ -1627,6 +1672,7 @@ namespace Ink_Canvas.Helpers
|
||||
StopWpsProcessCheckTimer();
|
||||
|
||||
_connectionCheckTimer?.Dispose();
|
||||
_slideShowStateCheckTimer?.Dispose();
|
||||
_wpsProcessCheckTimer?.Dispose();
|
||||
|
||||
_disposed = true;
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Threading;
|
||||
using Ink_Canvas.Helpers;
|
||||
|
||||
namespace Ink_Canvas.Helpers
|
||||
{
|
||||
@@ -120,6 +121,29 @@ namespace Ink_Canvas.Helpers
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理PPT放映状态变化
|
||||
/// </summary>
|
||||
public void OnSlideShowStateChanged(bool isInSlideShow)
|
||||
{
|
||||
_dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!isInSlideShow)
|
||||
{
|
||||
// 如果不在放映模式,隐藏所有导航面板
|
||||
HideAllNavigationPanels();
|
||||
LogHelper.WriteLogToFile("PPT放映状态变化:隐藏导航面板", LogHelper.LogType.Trace);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.WriteLogToFile($"处理PPT放映状态变化失败: {ex}", LogHelper.LogType.Error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新导航面板显示状态
|
||||
/// </summary>
|
||||
@@ -130,7 +154,10 @@ namespace Ink_Canvas.Helpers
|
||||
try
|
||||
{
|
||||
// 检查是否应该显示PPT按钮
|
||||
bool shouldShowButtons = ShowPPTButton && _mainWindow.BtnPPTSlideShowEnd.Visibility == Visibility.Visible;
|
||||
// 不仅要检查按钮设置,还要确保确实在PPT放映模式下
|
||||
bool shouldShowButtons = ShowPPTButton &&
|
||||
_mainWindow.BtnPPTSlideShowEnd.Visibility == Visibility.Visible &&
|
||||
_mainWindow.PPTManager?.IsInSlideShow == true;
|
||||
|
||||
if (!shouldShowButtons)
|
||||
{
|
||||
|
||||
@@ -86,6 +86,11 @@ namespace Ink_Canvas
|
||||
private PPTManager _pptManager;
|
||||
private PPTInkManager _pptInkManager;
|
||||
private PPTUIManager _pptUIManager;
|
||||
|
||||
/// <summary>
|
||||
/// 获取PPT管理器实例(供UI管理器使用)
|
||||
/// </summary>
|
||||
public PPTManager PPTManager => _pptManager;
|
||||
#endregion
|
||||
|
||||
#region PPT Manager Initialization
|
||||
@@ -104,6 +109,7 @@ namespace Ink_Canvas
|
||||
_pptManager.SlideShowEnd += OnPPTSlideShowEnd;
|
||||
_pptManager.PresentationOpen += OnPPTPresentationOpen;
|
||||
_pptManager.PresentationClose += OnPPTPresentationClose;
|
||||
_pptManager.SlideShowStateChanged += OnPPTSlideShowStateChanged;
|
||||
|
||||
// 初始化墨迹管理器
|
||||
_pptInkManager = new PPTInkManager();
|
||||
@@ -242,6 +248,27 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
private void OnPPTSlideShowStateChanged(bool isInSlideShow)
|
||||
{
|
||||
try
|
||||
{
|
||||
Application.Current.Dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
// 通知UI管理器放映状态变化
|
||||
_pptUIManager?.OnSlideShowStateChanged(isInSlideShow);
|
||||
|
||||
if (!isInSlideShow)
|
||||
{
|
||||
LogHelper.WriteLogToFile("PPT放映状态变化:退出放映模式", LogHelper.LogType.Trace);
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.WriteLogToFile($"处理PPT放映状态变化失败: {ex}", LogHelper.LogType.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private async void OnPPTSlideShowBegin(SlideShowWindow wn)
|
||||
{
|
||||
try
|
||||
|
||||
Reference in New Issue
Block a user