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;