Files
community/Ink Canvas/Windows/SettingsViews/Pages/CanvasPage.xaml.cs
T
PrefacedCorg b1640f44c2 feat(设置): 新增墨迹纠正设置页面并重构设置界面
重构设置界面,将墨迹纠正相关功能从画板设置中分离出来,新增独立的墨迹纠正设置页面。主要变更包括:
- 新增 InkRecognitionPage 用于集中管理墨迹纠正功能
- 调整设置窗口导航结构,将墨迹纠正设为画板设置的子页面
- 优化设置项布局,使用折叠面板组织复杂选项
- 移除主窗口中冗余的崩溃处理和手势设置
- 修复多指手势时橡皮擦状态保存问题
- 新增笔尖模式相关字符串资源
2026-04-25 13:56:16 +08:00

316 lines
14 KiB
C#

using Ink_Canvas.Windows.SettingsViews.Helpers;
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
public partial class CanvasPage : iNKORE.UI.WPF.Modern.Controls.Page
{
private bool _isLoaded = false;
public CanvasPage()
{
InitializeComponent();
Loaded += CanvasPage_Loaded;
}
private void CanvasPage_Loaded(object sender, RoutedEventArgs e)
{
LoadSettings();
_isLoaded = true;
}
private void LoadSettings()
{
_isLoaded = false;
try
{
var settings = SettingsManager.Settings;
if (settings.Canvas != null)
{
CardShowCursor.IsOn = settings.Canvas.IsShowCursor;
CardEnablePressureTouchMode.IsOn = settings.Canvas.EnablePressureTouchMode;
CardDisablePressure.IsOn = settings.Canvas.DisablePressure;
ComboBoxEraserSize.SelectedIndex = settings.Canvas.EraserSize;
CardHideStrokeWhenSelecting.IsOn = settings.Canvas.HideStrokeWhenSelecting;
CardClearCanvasAndClearTimeMachine.IsOn = settings.Canvas.ClearCanvasAndClearTimeMachine;
CardClearCanvasAlsoClearImages.IsOn = settings.Canvas.ClearCanvasAlsoClearImages;
CardCompressPicturesUploaded.IsOn = settings.Canvas.IsCompressPicturesUploaded;
CardLaunchSeewoVideoShowcaseForWhiteboardBooth.IsOn = settings.Canvas.LaunchSeewoVideoShowcaseForWhiteboardBooth;
ComboBoxHyperbolaAsymptoteOption.SelectedIndex = (int)settings.Canvas.HyperbolaAsymptoteOption;
CardShowCircleCenter.IsOn = settings.Canvas.ShowCircleCenter;
int curveMode = 0;
if (settings.Canvas.UseAdvancedBezierSmoothing) curveMode = 2;
else if (settings.Canvas.FitToCurve) curveMode = 1;
ComboBoxCurveSmoothingMode.SelectedIndex = curveMode;
CardEnableInkFade.IsOn = settings.Canvas.EnableInkFade;
InkFadeTimeSlider.Value = settings.Canvas.InkFadeTime;
CardHideInkFadeControlInPenMenu.IsOn = settings.Canvas.HideInkFadeControlInPenMenu;
CardBrushAutoRestore.IsOn = settings.Canvas.EnableBrushAutoRestore;
BrushAutoRestoreTimesTextBox.Text = settings.Canvas.BrushAutoRestoreTimes ?? string.Empty;
LoadBrushAutoRestoreColor(settings.Canvas.BrushAutoRestoreColor);
BrushAutoRestoreWidthSlider.Value = settings.Canvas.BrushAutoRestoreWidth > 0 ? settings.Canvas.BrushAutoRestoreWidth : 5;
BrushAutoRestoreAlphaSlider.Value = settings.Canvas.BrushAutoRestoreAlpha;
CardEnableEraserAutoSwitchBack.IsOn = settings.Canvas.EnableEraserAutoSwitchBack;
EraserAutoSwitchBackDelaySlider.Value = settings.Canvas.EraserAutoSwitchBackDelaySeconds;
}
if (settings.Gesture != null)
{
CardAutoSwitchTwoFingerGesture.IsOn = settings.Gesture.AutoSwitchTwoFingerGesture;
CardEnableTwoFingerRotationOnSelection.IsOn = settings.Gesture.IsEnableTwoFingerRotationOnSelection;
}
if (settings.Canvas != null)
{
CardEnablePalmEraser.IsOn = settings.Canvas.EnablePalmEraser;
ComboBoxPalmEraserSensitivity.SelectedIndex = settings.Canvas.PalmEraserSensitivity;
}
}
catch (Exception ex)
{
Debug.WriteLine($"加载画板设置时出错: {ex.Message}");
}
_isLoaded = true;
}
private void LoadBrushAutoRestoreColor(string hex)
{
try
{
foreach (var item in ComboBoxBrushAutoRestoreColor.Items)
{
if (item is ComboBoxItem cbi && cbi.Tag != null &&
string.Equals(cbi.Tag.ToString(), hex, StringComparison.OrdinalIgnoreCase))
{
ComboBoxBrushAutoRestoreColor.SelectedItem = cbi;
return;
}
}
ComboBoxBrushAutoRestoreColor.SelectedIndex = 0;
}
catch (Exception ex)
{
Debug.WriteLine($"加载画笔恢复颜色时出错: {ex.Message}");
}
}
private void ToggleSwitchShowCursor_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.IsShowCursor = CardShowCursor.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchEnablePressureTouchMode_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.EnablePressureTouchMode = CardEnablePressureTouchMode.IsOn;
if (SettingsManager.Settings.Canvas.EnablePressureTouchMode && SettingsManager.Settings.Canvas.DisablePressure)
{
SettingsManager.Settings.Canvas.DisablePressure = false;
CardDisablePressure.IsOn = false;
}
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchDisablePressure_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.DisablePressure = CardDisablePressure.IsOn;
if (SettingsManager.Settings.Canvas.DisablePressure && SettingsManager.Settings.Canvas.EnablePressureTouchMode)
{
SettingsManager.Settings.Canvas.EnablePressureTouchMode = false;
CardEnablePressureTouchMode.IsOn = false;
}
SettingsManager.SaveSettingsToFile();
}
private void ComboBoxEraserSize_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.EraserSize = ComboBoxEraserSize.SelectedIndex;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchHideStrokeWhenSelecting_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.HideStrokeWhenSelecting = CardHideStrokeWhenSelecting.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchClearCanvasAndClearTimeMachine_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.ClearCanvasAndClearTimeMachine = CardClearCanvasAndClearTimeMachine.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchClearCanvasAlsoClearImages_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.ClearCanvasAlsoClearImages = CardClearCanvasAlsoClearImages.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchCompressPicturesUploaded_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.IsCompressPicturesUploaded = CardCompressPicturesUploaded.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchLaunchSeewoVideoShowcaseForWhiteboardBooth_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.LaunchSeewoVideoShowcaseForWhiteboardBooth = CardLaunchSeewoVideoShowcaseForWhiteboardBooth.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ComboBoxHyperbolaAsymptoteOption_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.HyperbolaAsymptoteOption = (OptionalOperation)ComboBoxHyperbolaAsymptoteOption.SelectedIndex;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchShowCircleCenter_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.ShowCircleCenter = CardShowCircleCenter.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ComboBoxCurveSmoothingMode_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!_isLoaded) return;
var item = ComboBoxCurveSmoothingMode?.SelectedItem as ComboBoxItem;
if (item == null) return;
var tag = item.Tag?.ToString() ?? "0";
switch (tag)
{
case "1":
SettingsManager.Settings.Canvas.FitToCurve = true;
SettingsManager.Settings.Canvas.UseAdvancedBezierSmoothing = false;
break;
case "2":
SettingsManager.Settings.Canvas.FitToCurve = false;
SettingsManager.Settings.Canvas.UseAdvancedBezierSmoothing = true;
break;
default:
SettingsManager.Settings.Canvas.FitToCurve = false;
SettingsManager.Settings.Canvas.UseAdvancedBezierSmoothing = false;
break;
}
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchEnableInkFade_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.EnableInkFade = CardEnableInkFade.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void InkFadeTimeSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.InkFadeTime = (int)e.NewValue;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchHideInkFadeControlInPenMenu_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.HideInkFadeControlInPenMenu = CardHideInkFadeControlInPenMenu.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchBrushAutoRestore_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.EnableBrushAutoRestore = CardBrushAutoRestore.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void BrushAutoRestoreTimesTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.BrushAutoRestoreTimes = BrushAutoRestoreTimesTextBox.Text ?? string.Empty;
SettingsManager.SaveSettingsToFile();
}
private void ComboBoxBrushAutoRestoreColor_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!_isLoaded) return;
if (ComboBoxBrushAutoRestoreColor.SelectedItem is ComboBoxItem item)
{
string hex = item.Tag as string ?? string.Empty;
SettingsManager.Settings.Canvas.BrushAutoRestoreColor = hex;
SettingsManager.SaveSettingsToFile();
}
}
private void BrushAutoRestoreWidthSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.BrushAutoRestoreWidth = e.NewValue;
SettingsManager.SaveSettingsToFile();
}
private void BrushAutoRestoreAlphaSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.BrushAutoRestoreAlpha = (int)e.NewValue;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchEnableEraserAutoSwitchBack_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.EnableEraserAutoSwitchBack = CardEnableEraserAutoSwitchBack.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void EraserAutoSwitchBackDelaySlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.EraserAutoSwitchBackDelaySeconds = (int)e.NewValue;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchAutoSwitchTwoFingerGesture_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Gesture.AutoSwitchTwoFingerGesture = CardAutoSwitchTwoFingerGesture.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchEnableTwoFingerRotationOnSelection_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Gesture.IsEnableTwoFingerRotationOnSelection = CardEnableTwoFingerRotationOnSelection.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchEnablePalmEraser_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.EnablePalmEraser = CardEnablePalmEraser.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ComboBoxPalmEraserSensitivity_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.PalmEraserSensitivity = ComboBoxPalmEraserSensitivity.SelectedIndex;
SettingsManager.SaveSettingsToFile();
}
}
}