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 +