From fcfba7a9786c6f27f16954650e4a9e9386c54566 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Mon, 22 Sep 2025 11:36:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=BF=9B=E5=85=A5PPT=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=94=B6=E7=BA=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/MainWindow_cs/MW_AutoFold.cs | 7 +-- .../MainWindow_cs/MW_FloatingBarIcons.cs | 7 +-- Ink Canvas/MainWindow_cs/MW_PPT.cs | 58 +++++++++++++++++-- Ink Canvas/MainWindow_cs/MW_Settings.cs | 11 ++++ 4 files changed, 71 insertions(+), 12 deletions(-) diff --git a/Ink Canvas/MainWindow_cs/MW_AutoFold.cs b/Ink Canvas/MainWindow_cs/MW_AutoFold.cs index a26e6b06..eae218b5 100644 --- a/Ink Canvas/MainWindow_cs/MW_AutoFold.cs +++ b/Ink Canvas/MainWindow_cs/MW_AutoFold.cs @@ -260,12 +260,11 @@ namespace Ink_Canvas } // 只有在PPT放映模式下且页数有效时才显示翻页按钮 - // 但是,如果启用了PPT自动收纳功能,则不显示翻页按钮 + // 翻页按钮的显示应该基于PPT放映状态,而不是自动收纳设置 if (StackPanelPPTControls.Visibility == Visibility.Visible && BtnPPTSlideShowEnd.Visibility == Visibility.Visible && PPTManager?.IsInSlideShow == true && - PPTManager?.SlidesCount > 0 && - !Settings.Automation.IsAutoFoldInPPTSlideShow) + PPTManager?.SlidesCount > 0) { var dops = Settings.PowerPointSettings.PPTButtonsDisplayOption.ToString(); var dopsc = dops.ToCharArray(); @@ -273,7 +272,7 @@ namespace Ink_Canvas if (dopsc[1] == '2' && !isDisplayingOrHidingBlackboard) AnimationsHelper.ShowWithFadeIn(RightBottomPanelForPPTNavigation); if (dopsc[2] == '2' && !isDisplayingOrHidingBlackboard) AnimationsHelper.ShowWithFadeIn(LeftSidePanelForPPTNavigation); if (dopsc[3] == '2' && !isDisplayingOrHidingBlackboard) AnimationsHelper.ShowWithFadeIn(RightSidePanelForPPTNavigation); - LogHelper.WriteLogToFile($"从收纳模式恢复时显示PPT翻页按钮 - 放映状态: {PPTManager?.IsInSlideShow}, 页数: {PPTManager?.SlidesCount}", LogHelper.LogType.Trace); + LogHelper.WriteLogToFile($"从收纳模式恢复时显示PPT翻页按钮 - 放映状态: {PPTManager?.IsInSlideShow}, 页数: {PPTManager?.SlidesCount}, 自动收纳: {Settings.Automation.IsAutoFoldInPPTSlideShow}", LogHelper.LogType.Trace); } else { diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index c8eb0b5c..14069c2e 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -741,12 +741,11 @@ namespace Ink_Canvas HideSubPanelsImmediately(); // 只有在PPT放映模式下且页数有效时才显示翻页按钮 - // 但是,如果启用了PPT自动收纳功能,则不显示翻页按钮 + // 翻页按钮的显示应该基于PPT放映状态,而不是自动收纳设置 if (StackPanelPPTControls.Visibility == Visibility.Visible && BtnPPTSlideShowEnd.Visibility == Visibility.Visible && PPTManager?.IsInSlideShow == true && - PPTManager?.SlidesCount > 0 && - !Settings.Automation.IsAutoFoldInPPTSlideShow) + PPTManager?.SlidesCount > 0) { var dops = Settings.PowerPointSettings.PPTButtonsDisplayOption.ToString(); var dopsc = dops.ToCharArray(); @@ -754,7 +753,7 @@ namespace Ink_Canvas if (dopsc[1] == '2' && !isDisplayingOrHidingBlackboard) AnimationsHelper.ShowWithFadeIn(RightBottomPanelForPPTNavigation); if (dopsc[2] == '2' && !isDisplayingOrHidingBlackboard) AnimationsHelper.ShowWithFadeIn(LeftSidePanelForPPTNavigation); if (dopsc[3] == '2' && !isDisplayingOrHidingBlackboard) AnimationsHelper.ShowWithFadeIn(RightSidePanelForPPTNavigation); - LogHelper.WriteLogToFile($"显示PPT翻页按钮 - 放映状态: {PPTManager?.IsInSlideShow}, 页数: {PPTManager?.SlidesCount}", LogHelper.LogType.Trace); + LogHelper.WriteLogToFile($"显示PPT翻页按钮 - 放映状态: {PPTManager?.IsInSlideShow}, 页数: {PPTManager?.SlidesCount}, 自动收纳: {Settings.Automation.IsAutoFoldInPPTSlideShow}", LogHelper.LogType.Trace); } else { diff --git a/Ink Canvas/MainWindow_cs/MW_PPT.cs b/Ink Canvas/MainWindow_cs/MW_PPT.cs index 8d66fd6d..eb444b73 100644 --- a/Ink Canvas/MainWindow_cs/MW_PPT.cs +++ b/Ink Canvas/MainWindow_cs/MW_PPT.cs @@ -627,6 +627,11 @@ namespace Ink_Canvas if (!isFloatingBarFolded) FoldFloatingBar_MouseUp(new object(), null); } + else + { + // 如果关闭了自动收纳功能,重置状态记录,确保退出时不会错误收纳 + wasFloatingBarFoldedWhenEnterSlideShow = false; + } isStopInkReplay = true; @@ -776,14 +781,27 @@ namespace Ink_Canvas { try { - // 处理浮动栏状态:严格按进入前的状态恢复 - if (wasFloatingBarFoldedWhenEnterSlideShow) + // 处理浮动栏状态:根据自动收纳功能状态和进入前的状态恢复 + if (Settings.Automation.IsAutoFoldInPPTSlideShow) { - if (!isFloatingBarFolded) FoldFloatingBar_MouseUp(new object(), null); + // 只有在启用自动收纳功能时才根据记录的状态恢复 + if (wasFloatingBarFoldedWhenEnterSlideShow) + { + if (!isFloatingBarFolded) FoldFloatingBar_MouseUp(new object(), null); + } + else + { + if (isFloatingBarFolded) await UnFoldFloatingBar(new object()); + } } else { - if (isFloatingBarFolded) await UnFoldFloatingBar(new object()); + // 如果关闭了自动收纳功能,确保浮动栏展开 + if (isFloatingBarFolded) + { + await UnFoldFloatingBar(new object()); + LogHelper.WriteLogToFile("PPT自动收纳功能已关闭,强制展开浮动栏", LogHelper.LogType.Trace); + } } if (isEnteredSlideShowEndEvent) return; @@ -1068,6 +1086,38 @@ namespace Ink_Canvas } } + /// + /// 重置PPT相关的状态变量,当PPT自动收纳设置变更时调用 + /// + public void ResetPPTStateVariables() + { + try + { + // 重置进入PPT时的浮动栏收纳状态记录 + wasFloatingBarFoldedWhenEnterSlideShow = false; + + // 重置PPT放映结束事件标志 + isEnteredSlideShowEndEvent = false; + + // 重置演示文稿黑边状态 + isPresentationHaveBlackSpace = false; + + // 重置上次播放位置相关字段 + _lastPlaybackPage = 0; + _shouldNavigateToLastPage = false; + + // 重置页面切换防抖机制 + _lastSlideSwitchTime = DateTime.MinValue; + _pendingSlideIndex = -1; + + LogHelper.WriteLogToFile("PPT状态变量已重置", LogHelper.LogType.Trace); + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"重置PPT状态变量失败: {ex.Message}", LogHelper.LogType.Error); + } + } + /// /// 使用防抖机制处理页面切换 /// diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs index 4d521935..a77ed587 100644 --- a/Ink Canvas/MainWindow_cs/MW_Settings.cs +++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs @@ -1406,7 +1406,18 @@ namespace Ink_Canvas private void ToggleSwitchAutoFoldInPPTSlideShow_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; + + // 记录设置变更前的状态 + bool previousState = Settings.Automation.IsAutoFoldInPPTSlideShow; Settings.Automation.IsAutoFoldInPPTSlideShow = ToggleSwitchAutoFoldInPPTSlideShow.IsOn; + + // 如果设置状态发生变化,重置PPT相关状态变量 + if (previousState != Settings.Automation.IsAutoFoldInPPTSlideShow) + { + ResetPPTStateVariables(); + LogHelper.WriteLogToFile($"PPT自动收纳设置已变更: {Settings.Automation.IsAutoFoldInPPTSlideShow}, 已重置相关状态变量", LogHelper.LogType.Trace); + } + if (Settings.Automation.IsAutoFoldInPPTSlideShow) { SettingsPPTInkingAndAutoFoldExplictBorder.Visibility = Visibility.Visible;