diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml
index 7c44f0fb..33af03f8 100644
--- a/Ink Canvas/MainWindow.xaml
+++ b/Ink Canvas/MainWindow.xaml
@@ -640,360 +640,6 @@
Padding="15,5" Margin="0,10,0,0"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ MinWidth="0" />
@@ -5614,11 +5260,11 @@
Foreground="{DynamicResource FloatBarForeground}"
FontSize="12" VerticalAlignment="Center" />
+ MinWidth="0" />
diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs
index cc4921a5..378c3495 100644
--- a/Ink Canvas/MainWindow.xaml.cs
+++ b/Ink Canvas/MainWindow.xaml.cs
@@ -67,8 +67,8 @@ namespace Ink_Canvas
private WindowOverviewModel _windowOverviewModel;
// 设置面板相关状态
- private bool _isApplyingLanguageFromSettings;
- private bool _isReloadingForLanguageChange;
+ // _isApplyingLanguageFromSettings migrated to AppearancePage
+ internal bool _isReloadingForLanguageChange;
// 全屏处理状态标志
public bool isFullScreenApplied = false;
@@ -1487,36 +1487,13 @@ namespace Ink_Canvas
{
try
{
- if (ComboBoxLanguage == null || Settings?.Appearance == null) return;
+ if (Settings?.Appearance == null) return;
var preferredLanguage = Settings.Appearance.Language ?? string.Empty;
- int index;
- if (string.IsNullOrWhiteSpace(preferredLanguage))
+ if (!string.IsNullOrWhiteSpace(preferredLanguage))
{
- index = 0;
- }
- else if (string.Equals(preferredLanguage, "zh-CN", StringComparison.OrdinalIgnoreCase))
- {
- index = 1;
- }
- else if (string.Equals(preferredLanguage, "en-US", StringComparison.OrdinalIgnoreCase))
- {
- index = 2;
- }
- else
- {
- index = 0;
- }
-
- _isApplyingLanguageFromSettings = true;
- try
- {
- ComboBoxLanguage.SelectedIndex = index;
- }
- finally
- {
- _isApplyingLanguageFromSettings = false;
+ LocalizationHelper.TrySetCulture(preferredLanguage);
}
}
catch (Exception ex)
@@ -2411,7 +2388,21 @@ namespace Ink_Canvas
{
case "startup":
case "crashaction":
- break;
+ {
+ var sw = new Windows.SettingsViews.SettingsWindow();
+ sw.Owner = this;
+ sw.NavigateToPage("StartupPage");
+ sw.ShowDialog();
+ return;
+ }
+ case "gesture":
+ {
+ var sw = new Windows.SettingsViews.SettingsWindow();
+ sw.Owner = this;
+ sw.NavigateToPage("CanvasPage");
+ sw.ShowDialog();
+ return;
+ }
case "ppt":
targetGroupBox = GroupBoxPPT;
break;
@@ -2425,8 +2416,13 @@ namespace Ink_Canvas
targetGroupBox = GroupBoxRandWindow;
break;
case "theme":
- targetGroupBox = GroupBoxAppearanceNewUI;
- break;
+ {
+ var sw = new Windows.SettingsViews.SettingsWindow();
+ sw.Owner = this;
+ sw.NavigateToPage("AppearancePage");
+ sw.ShowDialog();
+ return;
+ }
case "shortcuts":
// 快捷键设置部分可能尚未实现
targetGroupBox = null;
@@ -3051,7 +3047,13 @@ namespace Ink_Canvas
{
var toggle = sender as ToggleSwitch;
if (toggle == null) return;
- Settings.InkToShape.IsInkToShapeEnabled = toggle.IsOn;
+
+ if (sender == FloatingBarToggleSwitchEnableInkToShape)
+ BoardToggleSwitchEnableInkToShape.IsOn = FloatingBarToggleSwitchEnableInkToShape.IsOn;
+ else
+ FloatingBarToggleSwitchEnableInkToShape.IsOn = BoardToggleSwitchEnableInkToShape.IsOn;
+
+ Settings.InkToShape.IsInkToShapeEnabled = FloatingBarToggleSwitchEnableInkToShape.IsOn;
SaveSettingsToFile();
}
catch (Exception ex)
@@ -3454,9 +3456,6 @@ namespace Ink_Canvas
// 获取所有滑块控件并添加触摸支持
var sliders = new List
{
- ViewboxFloatingBarScaleTransformValueSlider,
- ViewboxFloatingBarOpacityValueSlider,
- ViewboxFloatingBarOpacityInPPTValueSlider,
PPTButtonLeftPositionValueSlider,
PPTButtonRightPositionValueSlider,
PPTButtonLBPositionValueSlider,
@@ -3797,122 +3796,14 @@ namespace Ink_Canvas
#region Theme Toggle
- ///
- /// 主题下拉框选择变化事件
- ///
- private void ComboBoxTheme_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- if (!isLoaded) return;
+ // ComboBoxTheme_SelectionChanged and ComboBoxLanguage_SelectionChanged migrated to AppearancePage
- try
- {
- System.Windows.Controls.ComboBox comboBox = sender as System.Windows.Controls.ComboBox;
- if (comboBox != null)
- {
- Settings.Appearance.Theme = comboBox.SelectedIndex;
-
- // 应用新主题
- ApplyTheme(comboBox.SelectedIndex);
-
- // 保存设置
- SaveSettingsToFile();
-
- // 显示通知
- string themeName;
- switch (comboBox.SelectedIndex)
- {
- case 0:
- themeName = "浅色主题";
- break;
- case 1:
- themeName = "深色主题";
- break;
- case 2:
- themeName = "跟随系统";
- break;
- default:
- themeName = "未知主题";
- break;
- }
-
- ShowNotification($"已切换到{themeName}");
- }
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"切换主题时出错: {ex.Message}", LogHelper.LogType.Error);
- ShowNotification("主题切换失败");
- }
- }
-
-
- private void ComboBoxLanguage_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- try
- {
- if (!isLoaded) return;
- if (_isApplyingLanguageFromSettings) return;
- if (_isReloadingForLanguageChange) return;
- if (Settings?.Appearance == null) return;
- if (ComboBoxLanguage == null) return;
-
- var index = ComboBoxLanguage.SelectedIndex;
- string language;
-
- switch (index)
- {
- case 1:
- language = "zh-CN";
- break;
- case 2:
- language = "en-US";
- break;
- case 0:
- default:
- language = string.Empty;
- break;
- }
-
- Settings.Appearance.Language = language;
- SaveSettingsToFile();
-
- LocalizationHelper.TrySetCulture(language);
-
- _isReloadingForLanguageChange = true;
- Dispatcher.BeginInvoke(new Action(() =>
- {
- try
- {
- var newWindow = new MainWindow
- {
- WindowState = WindowState,
- Left = Left,
- Top = Top
- };
- newWindow.Show();
- Close();
- }
- catch (Exception ex2)
- {
- LogHelper.WriteLogToFile($"重建主窗口以应用语言时出错: {ex2.Message}", LogHelper.LogType.Error);
- ShowNotification("已更新界面语言设置,重启应用后可完全生效。");
- _isReloadingForLanguageChange = false;
- }
- }), DispatcherPriority.ApplicationIdle);
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"切换界面语言时出错: {ex.Message}", LogHelper.LogType.Error);
- ShowNotification("切换界面语言失败。");
- _isReloadingForLanguageChange = false;
- }
- }
///
/// 应用指定主题
///
/// 主题索引:0-浅色,1-深色,2-跟随系统
- private void ApplyTheme(int themeIndex)
+ internal void ApplyTheme(int themeIndex)
{
try
{
diff --git a/Ink Canvas/MainWindow_cs/MW_AutoTheme.cs b/Ink Canvas/MainWindow_cs/MW_AutoTheme.cs
index 747654cd..24442be6 100644
--- a/Ink Canvas/MainWindow_cs/MW_AutoTheme.cs
+++ b/Ink Canvas/MainWindow_cs/MW_AutoTheme.cs
@@ -282,16 +282,6 @@ namespace Ink_Canvas
private void UpdateFloatingBarIconComboBox()
{
- try
- {
- if (ComboBoxFloatingBarImg != null)
- {
- ComboBoxFloatingBarImg.SelectedIndex = Settings.Appearance.FloatingBarImg;
- }
- }
- catch (Exception)
- {
- }
}
private void RefreshStrokeSelectionIcons()
diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
index bcc46e90..0adc744c 100644
--- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
+++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
@@ -3304,7 +3304,7 @@ namespace Ink_Canvas
StackPanelControl.Visibility = Visibility.Visible;
}
- private int currentMode;
+ internal int currentMode;
// 退出批注模式时的全屏还原处理
private void RestoreFullScreenOnExitAnnotationMode()
diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs
index 6252d68a..4a85efe8 100644
--- a/Ink Canvas/MainWindow_cs/MW_Settings.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs
@@ -1,4 +1,4 @@
-using H.NotifyIcon;
+using H.NotifyIcon;
using Ink_Canvas.Helpers;
using Ink_Canvas.Windows.SettingsViews.Helpers;
using Newtonsoft.Json;
@@ -186,232 +186,9 @@ namespace Ink_Canvas
#region Appearance
- ///
- /// 处理显示笔尖模式切换开关状态更改事件
- ///
- /// 事件发送者
- /// 路由事件参数
- ///
- /// 当显示笔尖模式切换开关状态更改时:
- /// 1. 保存显示笔尖模式切换设置
- /// 2. 根据设置显示或隐藏笔尖模式切换面板
- ///
- private void ToggleSwitchEnableDisPlayNibModeToggle_Toggled(object sender, RoutedEventArgs e)
- {
- if (!isLoaded) return;
- Settings.Appearance.IsEnableDisPlayNibModeToggler = ToggleSwitchEnableDisPlayNibModeToggle.IsOn;
- SaveSettingsToFile();
- if (!ToggleSwitchEnableDisPlayNibModeToggle.IsOn)
- {
- NibModeSimpleStackPanel.Visibility = Visibility.Collapsed;
- BoardNibModeSimpleStackPanel.Visibility = Visibility.Collapsed;
- }
- else
- {
- NibModeSimpleStackPanel.Visibility = Visibility.Visible;
- BoardNibModeSimpleStackPanel.Visibility = Visibility.Visible;
- }
- }
- //private void ToggleSwitchIsColorfulViewboxFloatingBar_Toggled(object sender, RoutedEventArgs e) {
- // if (!isLoaded) return;
- // Settings.Appearance.IsColorfulViewboxFloatingBar = ToggleSwitchColorfulViewboxFloatingBar.IsOn;
- // SaveSettingsToFile();
- //}
- ///
- /// 处理快速面板开关状态更改事件
- ///
- /// 事件发送者
- /// 路由事件参数
- ///
- /// 当快速面板开关状态更改时,保存设置到文件
- ///
- private void ToggleSwitchEnableQuickPanel_Toggled(object sender, RoutedEventArgs e)
- {
- if (!isLoaded) return;
- Settings.Appearance.IsShowQuickPanel = ToggleSwitchEnableQuickPanel.IsOn;
- SaveSettingsToFile();
- }
- ///
- /// 处理启动屏幕开关状态更改事件
- ///
- /// 事件发送者
- /// 路由事件参数
- ///
- /// 当启动屏幕开关状态更改时,保存设置到文件
- ///
- private void ToggleSwitchEnableSplashScreen_Toggled(object sender, RoutedEventArgs e)
- {
- if (!isLoaded) return;
- Settings.Appearance.EnableSplashScreen = ToggleSwitchEnableSplashScreen.IsOn;
- SaveSettingsToFile();
- }
-
- ///
- /// 处理启动屏幕样式选择更改事件
- ///
- /// 事件发送者
- /// 路由事件参数
- ///
- /// 当选择启动屏幕样式时,保存设置到文件
- ///
- private void ComboBoxSplashScreenStyle_SelectionChanged(object sender, RoutedEventArgs e)
- {
- if (!isLoaded) return;
- Settings.Appearance.SplashScreenStyle = ComboBoxSplashScreenStyle.SelectedIndex;
- SaveSettingsToFile();
- }
-
- ///
- /// 处理浮动栏缩放值滑块值更改事件
- ///
- /// 事件发送者
- /// 路由事件参数
- ///
- /// 当浮动栏缩放值滑块值更改时:
- /// 1. 保存浮动栏缩放设置
- /// 2. 应用缩放值到浮动栏(限制在0.5-1.25范围内)
- /// 3. 等待UI更新后重新计算浮动栏位置,确保居中计算准确
- /// 4. 只在屏幕模式下重新计算浮动栏位置
- ///
- private void ViewboxFloatingBarScaleTransformValueSlider_ValueChanged(object sender, RoutedEventArgs e)
- {
- if (!isLoaded) return;
- Settings.Appearance.ViewboxFloatingBarScaleTransformValue =
- ViewboxFloatingBarScaleTransformValueSlider.Value;
- SaveSettingsToFile();
- var val = ViewboxFloatingBarScaleTransformValueSlider.Value;
- ViewboxFloatingBarScaleTransform.ScaleX =
- val > 0.5 && val < 1.25 ? val : val <= 0.5 ? 0.5 : val >= 1.25 ? 1.25 : 1;
- ViewboxFloatingBarScaleTransform.ScaleY =
- val > 0.5 && val < 1.25 ? val : val <= 0.5 ? 0.5 : val >= 1.25 ? 1.25 : 1;
-
- // 等待UI更新后再重新计算浮动栏位置,确保居中计算准确
- Dispatcher.BeginInvoke(new Action(async () =>
- {
- // 强制更新布局以确保ActualWidth正确
- ViewboxFloatingBar.UpdateLayout();
-
- // 等待一小段时间让布局完全更新
- await Task.Delay(100);
-
- // 再次强制更新布局
- ViewboxFloatingBar.UpdateLayout();
-
- // 强制重新测量和排列
- ViewboxFloatingBar.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
- ViewboxFloatingBar.Arrange(new Rect(ViewboxFloatingBar.DesiredSize));
-
- // auto align - 新增:只在屏幕模式下重新计算浮动栏位置
- if (currentMode == 0)
- {
- if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
- ViewboxFloatingBarMarginAnimation(60);
- else
- ViewboxFloatingBarMarginAnimation(100, true);
- }
- }), DispatcherPriority.Render);
- }
-
- ///
- /// 处理浮动栏透明度值滑块值更改事件
- ///
- /// 事件发送者
- /// 路由事件参数
- ///
- /// 当浮动栏透明度值滑块值更改时:
- /// 1. 保存浮动栏透明度设置
- /// 2. 应用透明度值到浮动栏
- ///
- private void ViewboxFloatingBarOpacityValueSlider_ValueChanged(object sender, RoutedEventArgs e)
- {
- if (!isLoaded) return;
- Settings.Appearance.ViewboxFloatingBarOpacityValue = ViewboxFloatingBarOpacityValueSlider.Value;
- SaveSettingsToFile();
- ViewboxFloatingBar.Opacity = Settings.Appearance.ViewboxFloatingBarOpacityValue;
- }
-
- ///
- /// 处理PPT中浮动栏透明度值滑块值更改事件
- ///
- /// 事件发送者
- /// 路由事件参数
- ///
- /// 当PPT中浮动栏透明度值滑块值更改时,保存设置到文件
- ///
- private void ViewboxFloatingBarOpacityInPPTValueSlider_ValueChanged(object sender, RoutedEventArgs e)
- {
- if (!isLoaded) return;
- Settings.Appearance.ViewboxFloatingBarOpacityInPPTValue = ViewboxFloatingBarOpacityInPPTValueSlider.Value;
- SaveSettingsToFile();
- }
-
- ///
- /// 处理托盘图标开关状态更改事件
- ///
- /// 事件发送者
- /// 路由事件参数
- ///
- /// 当托盘图标开关状态更改时:
- /// 1. 保存托盘图标设置
- /// 2. 根据设置显示或隐藏托盘图标示例图像
- /// 3. 根据设置显示或隐藏系统托盘图标
- ///
- private void ToggleSwitchEnableTrayIcon_Toggled(object sender, RoutedEventArgs e)
- {
- if (!isLoaded) return;
- Settings.Appearance.EnableTrayIcon = ToggleSwitchEnableTrayIcon.IsOn;
- ICCTrayIconExampleImage.Visibility = Settings.Appearance.EnableTrayIcon ? Visibility.Visible : Visibility.Collapsed;
- var _taskbar = (TaskbarIcon)Application.Current.Resources["TaskbarTrayIcon"];
- _taskbar.Visibility = ToggleSwitchEnableTrayIcon.IsOn ? Visibility.Visible : Visibility.Collapsed;
- SaveSettingsToFile();
- }
-
- ///
- /// 处理展开按钮图像选择更改事件
- ///
- /// 事件发送者
- /// 路由事件参数
- ///
- /// 当选择展开按钮图像类型时:
- /// 1. 保存展开按钮图像类型设置
- /// 2. 根据选择的图像类型更新左右展开按钮的图标
- /// 3. 为不同的图像类型设置不同的大小和旋转角度
- ///
- private void ComboBoxUnFoldBtnImg_SelectionChanged(object sender, RoutedEventArgs e)
- {
- if (!isLoaded) return;
- Settings.Appearance.UnFoldButtonImageType = ComboBoxUnFoldBtnImg.SelectedIndex;
- SaveSettingsToFile();
- if (ComboBoxUnFoldBtnImg.SelectedIndex == 0)
- {
- RightUnFoldBtnImgChevron.Source =
- new BitmapImage(new Uri("pack://application:,,,/Resources/new-icons/unfold-chevron.png"));
- RightUnFoldBtnImgChevron.Width = 14;
- RightUnFoldBtnImgChevron.Height = 14;
- RightUnFoldBtnImgChevron.RenderTransform = new RotateTransform(180);
- LeftUnFoldBtnImgChevron.Source =
- new BitmapImage(new Uri("pack://application:,,,/Resources/new-icons/unfold-chevron.png"));
- LeftUnFoldBtnImgChevron.Width = 14;
- LeftUnFoldBtnImgChevron.Height = 14;
- LeftUnFoldBtnImgChevron.RenderTransform = null;
- }
- else if (ComboBoxUnFoldBtnImg.SelectedIndex == 1)
- {
- RightUnFoldBtnImgChevron.Source =
- new BitmapImage(new Uri("pack://application:,,,/Resources/new-icons/pen-white.png"));
- RightUnFoldBtnImgChevron.Width = 18;
- RightUnFoldBtnImgChevron.Height = 18;
- RightUnFoldBtnImgChevron.RenderTransform = null;
- LeftUnFoldBtnImgChevron.Source =
- new BitmapImage(new Uri("pack://application:,,,/Resources/new-icons/pen-white.png"));
- LeftUnFoldBtnImgChevron.Width = 18;
- LeftUnFoldBtnImgChevron.Height = 18;
- LeftUnFoldBtnImgChevron.RenderTransform = null;
- }
- }
private static readonly Lazy