diff --git a/.gitignore b/.gitignore
index b3e7e436..d95957d7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -406,13 +406,8 @@ MigrationBackup/
# Fody - auto-generated XML schema
FodyWeavers.xsd
-# VS Code files for those working on multiple tools
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-!.vscode/*.code-snippets
+# VS Code local workspace files
+.vscode/
# Local History for Visual Studio Code
.history/
@@ -436,3 +431,4 @@ telemetry_dsn.txt
SKILL_FloatingToolbarRefactoring.md
/Samples
/SamplePlugin
+/_tmpbuild/
diff --git a/Ink Canvas/Controls/PptNavBar.xaml.cs b/Ink Canvas/Controls/PptNavBar.xaml.cs
index 53ae5e61..716d802e 100644
--- a/Ink Canvas/Controls/PptNavBar.xaml.cs
+++ b/Ink Canvas/Controls/PptNavBar.xaml.cs
@@ -15,6 +15,35 @@ namespace Ink_Canvas.Controls
///
public partial class PptNavBar : UserControl
{
+ ///
+ /// 预览模式:禁用所有鼠标交互,仅用于设置界面展示
+ ///
+ public static readonly DependencyProperty IsPreviewModeProperty = DependencyProperty.Register(
+ nameof(IsPreviewMode), typeof(bool), typeof(PptNavBar),
+ new PropertyMetadata(false, OnIsPreviewModeChanged));
+
+ public bool IsPreviewMode
+ {
+ get => (bool)GetValue(IsPreviewModeProperty);
+ set => SetValue(IsPreviewModeProperty, value);
+ }
+
+ private static void OnIsPreviewModeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ if (d is PptNavBar bar)
+ {
+ bool isPreview = (bool)e.NewValue;
+ bar.IsHitTestVisible = !isPreview;
+ if (isPreview)
+ {
+ bar.PreviewList.IsHitTestVisible = false;
+ bar.PreviewList.Visibility = Visibility.Collapsed;
+ // Set default values for preview display
+ bar.CurrentSlide = 1;
+ bar.TotalSlides = 10;
+ }
+ }
+ }
public sealed class PreviewItem
{
public int SlideNumber { get; set; }
@@ -291,6 +320,7 @@ private void SyncPreviewSelection()
private void PreviousButton_MouseDown(object sender, MouseButtonEventArgs e)
{
+ if (IsPreviewMode) return;
_lastDown = sender;
SetFeedback(PreviousButtonFeedbackBorder, 0.15);
PreviousPressedDown?.Invoke(this, EventArgs.Empty);
@@ -298,6 +328,7 @@ private void PreviousButton_MouseDown(object sender, MouseButtonEventArgs e)
private void PreviousButton_MouseUp(object sender, MouseButtonEventArgs e)
{
+ if (IsPreviewMode) return;
SetFeedback(PreviousButtonFeedbackBorder, 0);
PressEnded?.Invoke(this, EventArgs.Empty);
if (_lastDown != sender) return;
@@ -307,6 +338,7 @@ private void PreviousButton_MouseUp(object sender, MouseButtonEventArgs e)
private void PreviousButton_MouseLeave(object sender, MouseEventArgs e)
{
+ if (IsPreviewMode) return;
SetFeedback(PreviousButtonFeedbackBorder, 0);
_lastDown = null;
PressEnded?.Invoke(this, EventArgs.Empty);
@@ -314,6 +346,7 @@ private void PreviousButton_MouseLeave(object sender, MouseEventArgs e)
private void NextButton_MouseDown(object sender, MouseButtonEventArgs e)
{
+ if (IsPreviewMode) return;
_lastDown = sender;
SetFeedback(NextButtonFeedbackBorder, 0.15);
NextPressedDown?.Invoke(this, EventArgs.Empty);
@@ -321,6 +354,7 @@ private void NextButton_MouseDown(object sender, MouseButtonEventArgs e)
private void NextButton_MouseUp(object sender, MouseButtonEventArgs e)
{
+ if (IsPreviewMode) return;
SetFeedback(NextButtonFeedbackBorder, 0);
PressEnded?.Invoke(this, EventArgs.Empty);
if (_lastDown != sender) return;
@@ -330,6 +364,7 @@ private void NextButton_MouseUp(object sender, MouseButtonEventArgs e)
private void NextButton_MouseLeave(object sender, MouseEventArgs e)
{
+ if (IsPreviewMode) return;
SetFeedback(NextButtonFeedbackBorder, 0);
_lastDown = null;
PressEnded?.Invoke(this, EventArgs.Empty);
@@ -337,12 +372,14 @@ private void NextButton_MouseLeave(object sender, MouseEventArgs e)
private void PageButton_MouseDown(object sender, MouseButtonEventArgs e)
{
+ if (IsPreviewMode) return;
_lastDown = sender;
SetFeedback(PageButtonFeedbackBorder, 0.15);
}
private void PageButton_MouseUp(object sender, MouseButtonEventArgs e)
{
+ if (IsPreviewMode) return;
SetFeedback(PageButtonFeedbackBorder, 0);
if (_lastDown != sender) return;
_lastDown = null;
@@ -351,12 +388,14 @@ private void PageButton_MouseUp(object sender, MouseButtonEventArgs e)
private void PageButton_MouseLeave(object sender, MouseEventArgs e)
{
+ if (IsPreviewMode) return;
SetFeedback(PageButtonFeedbackBorder, 0);
_lastDown = null;
}
private void PreviewList_MouseUp(object sender, MouseButtonEventArgs e)
{
+ if (IsPreviewMode) return;
if (PreviewList.SelectedItem is PreviewItem item)
{
SlideSelected?.Invoke(this, item.SlideNumber);
diff --git a/Ink Canvas/InkCanvasForClass.csproj b/Ink Canvas/InkCanvasForClass.csproj
index 2e165f49..8cc43248 100644
--- a/Ink Canvas/InkCanvasForClass.csproj
+++ b/Ink Canvas/InkCanvasForClass.csproj
@@ -492,6 +492,7 @@
+
@@ -510,6 +511,7 @@
+
diff --git a/Ink Canvas/Resources/PresentationExample/ppt-preview-bg.png b/Ink Canvas/Resources/PresentationExample/ppt-preview-bg.png
new file mode 100644
index 00000000..fc44a273
Binary files /dev/null and b/Ink Canvas/Resources/PresentationExample/ppt-preview-bg.png differ
diff --git a/Ink Canvas/Windows/SettingsViews/Pages/PowerPointPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/PowerPointPage.xaml
index 3d262cdf..f04aea86 100644
--- a/Ink Canvas/Windows/SettingsViews/Pages/PowerPointPage.xaml
+++ b/Ink Canvas/Windows/SettingsViews/Pages/PowerPointPage.xaml
@@ -4,10 +4,13 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Ink_Canvas.Windows.SettingsViews.Pages"
+ xmlns:windows="clr-namespace:Ink_Canvas.Windows"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf"
xmlns:i18n="clr-namespace:Ink_Canvas.MarkupExtensions"
+ xmlns:icons="clr-namespace:Ink_Canvas"
xmlns:controls="clr-namespace:Ink_Canvas.Controls;assembly=InkCanvas.Controls"
+ xmlns:pptnav="clr-namespace:Ink_Canvas.Controls"
xmlns:c="clr-namespace:Ink_Canvas.Converter"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
@@ -18,6 +21,7 @@
4
+