Revert "优化代码"

This reverts commit 92bb458345.
This commit is contained in:
2025-09-30 19:15:03 +08:00
parent d9e3524211
commit a9b0ac0595
16 changed files with 131 additions and 71 deletions
+2 -1
View File
@@ -299,7 +299,8 @@ namespace Ink_Canvas
try try
{ {
// 获取主窗口实例并清理PowerPoint进程守护 // 获取主窗口实例并清理PowerPoint进程守护
if (Current.MainWindow is MainWindow mainWindow) var mainWindow = Current.MainWindow as MainWindow;
if (mainWindow != null)
{ {
// 通过反射调用StopPowerPointProcessMonitoring方法 // 通过反射调用StopPowerPointProcessMonitoring方法
var method = mainWindow.GetType().GetMethod("StopPowerPointProcessMonitoring", var method = mainWindow.GetType().GetMethod("StopPowerPointProcessMonitoring",
+6 -3
View File
@@ -30,7 +30,8 @@ namespace Ink_Canvas.Helpers
if (!(bool)window.GetValue(IsAvoidFullScreenEnabledProperty)) if (!(bool)window.GetValue(IsAvoidFullScreenEnabledProperty))
{ {
if (PresentationSource.FromVisual(window) is HwndSource hwndSource) var hwndSource = PresentationSource.FromVisual(window) as HwndSource;
if (hwndSource != null)
{ {
hwndSource.AddHook(KeepInWorkingAreaHook); hwndSource.AddHook(KeepInWorkingAreaHook);
window.SetValue(IsAvoidFullScreenEnabledProperty, true); window.SetValue(IsAvoidFullScreenEnabledProperty, true);
@@ -45,7 +46,8 @@ namespace Ink_Canvas.Helpers
if ((bool)window.GetValue(IsAvoidFullScreenEnabledProperty)) if ((bool)window.GetValue(IsAvoidFullScreenEnabledProperty))
{ {
if (PresentationSource.FromVisual(window) is HwndSource hwndSource) var hwndSource = PresentationSource.FromVisual(window) as HwndSource;
if (hwndSource != null)
{ {
hwndSource.RemoveHook(KeepInWorkingAreaHook); hwndSource.RemoveHook(KeepInWorkingAreaHook);
window.ClearValue(IsAvoidFullScreenEnabledProperty); window.ClearValue(IsAvoidFullScreenEnabledProperty);
@@ -59,7 +61,8 @@ namespace Ink_Canvas.Helpers
private static IntPtr KeepInWorkingAreaHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) private static IntPtr KeepInWorkingAreaHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{ {
// 只拦截主画布窗口的全屏(最大化)操作 // 只拦截主画布窗口的全屏(最大化)操作
if (!(HwndSource.FromHwnd(hwnd)?.RootVisual is Window window)) return IntPtr.Zero; var window = HwndSource.FromHwnd(hwnd)?.RootVisual as Window;
if (window == null) return IntPtr.Zero;
// 这里假设主画布窗口类名为MainWindow(如有不同请调整) // 这里假设主画布窗口类名为MainWindow(如有不同请调整)
if (window.GetType().Name != "MainWindow") return IntPtr.Zero; if (window.GetType().Name != "MainWindow") return IntPtr.Zero;
+8 -4
View File
@@ -107,7 +107,8 @@ namespace Ink_Canvas.Helpers
{ {
// 将墨迹添加到 inkCanvas 的父容器中,而不是 inkCanvas.Children // 将墨迹添加到 inkCanvas 的父容器中,而不是 inkCanvas.Children
// 这样可以避免坐标系统问题 // 这样可以避免坐标系统问题
if (_mainWindow.inkCanvas.Parent is Panel parent) var parent = _mainWindow.inkCanvas.Parent as Panel;
if (parent != null)
{ {
parent.Children.Add(strokeVisual); parent.Children.Add(strokeVisual);
} }
@@ -153,7 +154,8 @@ namespace Ink_Canvas.Helpers
try try
{ {
// 从父容器中移除墨迹 // 从父容器中移除墨迹
if (_mainWindow.inkCanvas?.Parent is Panel parent && parent.Children.Contains(visual)) var parent = _mainWindow.inkCanvas?.Parent as Panel;
if (parent != null && parent.Children.Contains(visual))
{ {
parent.Children.Remove(visual); parent.Children.Remove(visual);
} }
@@ -511,7 +513,8 @@ namespace Ink_Canvas.Helpers
originalVisual.Visibility = Visibility.Hidden; originalVisual.Visibility = Visibility.Hidden;
var segments = new List<UIElement>(); var segments = new List<UIElement>();
if (!(_mainWindow.inkCanvas?.Parent is Panel parent)) var parent = _mainWindow.inkCanvas?.Parent as Panel;
if (parent == null)
{ {
// 如果父容器不是Panel,直接使用InkCanvas // 如果父容器不是Panel,直接使用InkCanvas
parent = null; // 稍后会检查并使用InkCanvas.Children parent = null; // 稍后会检查并使用InkCanvas.Children
@@ -867,7 +870,8 @@ namespace Ink_Canvas.Helpers
try try
{ {
// 从父容器中移除墨迹 // 从父容器中移除墨迹
if (_mainWindow.inkCanvas?.Parent is Panel parent && parent.Children.Contains(visual)) var parent = _mainWindow.inkCanvas?.Parent as Panel;
if (parent != null && parent.Children.Contains(visual))
{ {
parent.Children.Remove(visual); parent.Children.Remove(visual);
} }
@@ -313,7 +313,8 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn
var buttonElement = _launcherButton.Element; var buttonElement = _launcherButton.Element;
// 查找浮动栏 // 查找浮动栏
if (!(mainWindow.FindName("StackPanelFloatingBar") is Panel floatingBar)) var floatingBar = mainWindow.FindName("StackPanelFloatingBar") as Panel;
if (floatingBar == null)
{ {
// 如果直接查找失败,则尝试遍历可视树查找 // 如果直接查找失败,则尝试遍历可视树查找
Panel floatingBarPanelFromTree = null; Panel floatingBarPanelFromTree = null;
@@ -404,7 +405,8 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn
var buttonElement = _launcherButton.Element; var buttonElement = _launcherButton.Element;
// 查找浮动栏 // 查找浮动栏
if (!(mainWindow.FindName("StackPanelFloatingBar") is Panel floatingBar)) var floatingBar = mainWindow.FindName("StackPanelFloatingBar") as Panel;
if (floatingBar == null)
{ {
// 如果直接查找失败,则尝试遍历可视树查找 // 如果直接查找失败,则尝试遍历可视树查找
Panel floatingBarPanelFromTree = null; Panel floatingBarPanelFromTree = null;
+2 -1
View File
@@ -25,7 +25,8 @@ namespace Ink_Canvas.Helpers
return Screen.PrimaryScreen; return Screen.PrimaryScreen;
// 获取窗口的句柄 // 获取窗口的句柄
if (!(PresentationSource.FromVisual(window) is HwndSource hwndSource)) var hwndSource = PresentationSource.FromVisual(window) as HwndSource;
if (hwndSource == null)
return Screen.PrimaryScreen; return Screen.PrimaryScreen;
// 获取窗口在屏幕上的位置 // 获取窗口在屏幕上的位置
+4 -2
View File
@@ -61,7 +61,8 @@ namespace Ink_Canvas.Helpers
{ {
if (windowTitle.Length == windowName.Length) if (windowTitle.Length == windowName.Length)
{ {
if (window.GetCurrentPattern(WindowPattern.Pattern) is WindowPattern windowPattern) WindowPattern windowPattern = window.GetCurrentPattern(WindowPattern.Pattern) as WindowPattern;
if (windowPattern != null)
{ {
return true; return true;
} }
@@ -69,7 +70,8 @@ namespace Ink_Canvas.Helpers
} }
else else
{ {
if (window.GetCurrentPattern(WindowPattern.Pattern) is WindowPattern windowPattern) WindowPattern windowPattern = window.GetCurrentPattern(WindowPattern.Pattern) as WindowPattern;
if (windowPattern != null)
{ {
return true; return true;
} }
+34 -18
View File
@@ -26,7 +26,6 @@ using System.Windows.Threading;
using Application = System.Windows.Application; using Application = System.Windows.Application;
using Brushes = System.Windows.Media.Brushes; using Brushes = System.Windows.Media.Brushes;
using Button = System.Windows.Controls.Button; using Button = System.Windows.Controls.Button;
using ComboBox = System.Windows.Controls.ComboBox;
using Cursor = System.Windows.Input.Cursor; using Cursor = System.Windows.Input.Cursor;
using Cursors = System.Windows.Input.Cursors; using Cursors = System.Windows.Input.Cursors;
using DpiChangedEventArgs = System.Windows.DpiChangedEventArgs; using DpiChangedEventArgs = System.Windows.DpiChangedEventArgs;
@@ -329,7 +328,8 @@ namespace Ink_Canvas
private void inkCanvas_EditingModeChanged(object sender, RoutedEventArgs e) private void inkCanvas_EditingModeChanged(object sender, RoutedEventArgs e)
{ {
if (!(sender is InkCanvas inkCanvas1)) return; var inkCanvas1 = sender as InkCanvas;
if (inkCanvas1 == null) return;
// 使用辅助方法设置光标 // 使用辅助方法设置光标
SetCursorBasedOnEditingMode(inkCanvas1); SetCursorBasedOnEditingMode(inkCanvas1);
@@ -358,7 +358,8 @@ namespace Ink_Canvas
if (inkCanvas1.EditingMode == InkCanvasEditingMode.Ink) forcePointEraser = !forcePointEraser; if (inkCanvas1.EditingMode == InkCanvasEditingMode.Ink) forcePointEraser = !forcePointEraser;
// 处理橡皮擦覆盖层的启用/禁用 // 处理橡皮擦覆盖层的启用/禁用
if (FindName("EraserOverlayCanvas") is Canvas eraserOverlay) var eraserOverlay = FindName("EraserOverlayCanvas") as Canvas;
if (eraserOverlay != null)
{ {
if (inkCanvas1.EditingMode == InkCanvasEditingMode.EraseByPoint) if (inkCanvas1.EditingMode == InkCanvasEditingMode.EraseByPoint)
{ {
@@ -1300,7 +1301,8 @@ namespace Ink_Canvas
BorderSettingsMask.Background = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0)); BorderSettingsMask.Background = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0));
// 获取SettingsPanelScrollViewer中的所有GroupBox // 获取SettingsPanelScrollViewer中的所有GroupBox
if (!(SettingsPanelScrollViewer.Content is StackPanel stackPanel)) return; var stackPanel = SettingsPanelScrollViewer.Content as StackPanel;
if (stackPanel == null) return;
// 确保所有GroupBox都是可见的 // 确保所有GroupBox都是可见的
foreach (var child in stackPanel.Children) foreach (var child in stackPanel.Children)
@@ -1515,15 +1517,20 @@ namespace Ink_Canvas
// 清除所有导航按钮的Tag属性 // 清除所有导航按钮的Tag属性
private void ClearAllNavButtonTags() private void ClearAllNavButtonTags()
{ {
if (!(BorderSettings.Child is Grid grid)) return; var grid = BorderSettings.Child as Grid;
if (grid == null) return;
if (!(grid.Children[0] is Border navSidebar)) return; var navSidebar = grid.Children[0] as Border;
if (navSidebar == null) return;
if (!(navSidebar.Child is Grid navGrid)) return; var navGrid = navSidebar.Child as Grid;
if (navGrid == null) return;
if (!(navGrid.Children[1] is ScrollViewer scrollViewer)) return; var scrollViewer = navGrid.Children[1] as ScrollViewer;
if (scrollViewer == null) return;
if (!(scrollViewer.Content is StackPanel stackPanel)) return; var stackPanel = scrollViewer.Content as StackPanel;
if (stackPanel == null) return;
foreach (var child in stackPanel.Children) foreach (var child in stackPanel.Children)
{ {
@@ -1537,24 +1544,30 @@ namespace Ink_Canvas
// 设置导航按钮的Tag属性 // 设置导航按钮的Tag属性
private void SetNavButtonTag(string tag) private void SetNavButtonTag(string tag)
{ {
if (!(BorderSettings.Child is Grid grid)) return; var grid = BorderSettings.Child as Grid;
if (grid == null) return;
if (!(grid.Children[0] is Border navSidebar)) return; var navSidebar = grid.Children[0] as Border;
if (navSidebar == null) return;
if (!(navSidebar.Child is Grid navGrid)) return; var navGrid = navSidebar.Child as Grid;
if (navGrid == null) return;
if (!(navGrid.Children[1] is ScrollViewer scrollViewer)) return; var scrollViewer = navGrid.Children[1] as ScrollViewer;
if (scrollViewer == null) return;
if (!(scrollViewer.Content is StackPanel stackPanel)) return; var stackPanel = scrollViewer.Content as StackPanel;
if (stackPanel == null) return;
foreach (var child in stackPanel.Children) foreach (var child in stackPanel.Children)
{ {
if (child is Button button) if (child is Button button)
{ {
// 检查按钮的ToolTip属性,根据tag设置对应的按钮 // 检查按钮的ToolTip属性,根据tag设置对应的按钮
string buttonTag = button.Tag as string;
// 如果按钮的Tag与要设置的tag匹配,则设置Tag // 如果按钮的Tag与要设置的tag匹配,则设置Tag
if (button.Tag is string buttonTag && buttonTag.ToLower() == tag.ToLower()) if (buttonTag != null && buttonTag.ToLower() == tag.ToLower())
{ {
button.Tag = tag; button.Tag = tag;
return; return;
@@ -2533,7 +2546,8 @@ namespace Ink_Canvas
try try
{ {
// 获取滑块的轨道元素 // 获取滑块的轨道元素
if (!(slider.Template.FindName("PART_Track", slider) is Track track)) var track = slider.Template.FindName("PART_Track", slider) as Track;
if (track == null)
{ {
// 如果找不到轨道,使用简单方法 // 如果找不到轨道,使用简单方法
UpdateSliderValueFromPosition(slider, position); UpdateSliderValueFromPosition(slider, position);
@@ -2660,7 +2674,8 @@ namespace Ink_Canvas
{ {
try try
{ {
if (sender is ToggleSwitch toggle) var toggle = sender as ToggleSwitch;
if (toggle != null)
{ {
Settings.ModeSettings.IsPPTOnlyMode = toggle.IsOn; Settings.ModeSettings.IsPPTOnlyMode = toggle.IsOn;
@@ -2758,7 +2773,8 @@ namespace Ink_Canvas
try try
{ {
if (sender is ComboBox comboBox) System.Windows.Controls.ComboBox comboBox = sender as System.Windows.Controls.ComboBox;
if (comboBox != null)
{ {
Settings.Appearance.Theme = comboBox.SelectedIndex; Settings.Appearance.Theme = comboBox.SelectedIndex;
+6 -4
View File
@@ -238,8 +238,9 @@ namespace Ink_Canvas
RefreshBlackBoardSidePageListView(); RefreshBlackBoardSidePageListView();
AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardBorderLeftPageListView); AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardBorderLeftPageListView);
await Task.Delay(1); await Task.Delay(1);
if (BlackBoardLeftSidePageListView.ItemContainerGenerator.ContainerFromIndex( var leftContainer = BlackBoardLeftSidePageListView.ItemContainerGenerator.ContainerFromIndex(
CurrentWhiteboardIndex - 1) is ListViewItem leftContainer) CurrentWhiteboardIndex - 1) as ListViewItem;
if (leftContainer != null)
{ {
ScrollViewToVerticalTop(leftContainer, BlackBoardLeftSidePageListScrollViewer); ScrollViewToVerticalTop(leftContainer, BlackBoardLeftSidePageListScrollViewer);
} }
@@ -257,8 +258,9 @@ namespace Ink_Canvas
RefreshBlackBoardSidePageListView(); RefreshBlackBoardSidePageListView();
AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardBorderRightPageListView); AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardBorderRightPageListView);
await Task.Delay(1); await Task.Delay(1);
if (BlackBoardRightSidePageListView.ItemContainerGenerator.ContainerFromIndex( var rightContainer = BlackBoardRightSidePageListView.ItemContainerGenerator.ContainerFromIndex(
CurrentWhiteboardIndex - 1) is ListViewItem rightContainer) CurrentWhiteboardIndex - 1) as ListViewItem;
if (rightContainer != null)
{ {
ScrollViewToVerticalTop(rightContainer, BlackBoardRightSidePageListScrollViewer); ScrollViewToVerticalTop(rightContainer, BlackBoardRightSidePageListScrollViewer);
} }
+6 -3
View File
@@ -504,7 +504,8 @@ namespace Ink_Canvas
BackgroundPalette.Child = stackPanel; BackgroundPalette.Child = stackPanel;
// 获取主窗口中的根网格,确保面板添加到顶层 // 获取主窗口中的根网格,确保面板添加到顶层
if (FindName("Main_Grid") is Grid mainGrid) Grid mainGrid = FindName("Main_Grid") as Grid;
if (mainGrid != null)
{ {
// 删除可能已存在的BackgroundPalette // 删除可能已存在的BackgroundPalette
foreach (UIElement element in mainGrid.Children) foreach (UIElement element in mainGrid.Children)
@@ -525,7 +526,8 @@ namespace Ink_Canvas
mainGrid.Children.Add(BackgroundPalette); mainGrid.Children.Add(BackgroundPalette);
// 设置面板位置 // 设置面板位置
if (FindName("BoardChangeBackgroundColorBtn") is FrameworkElement clickElement) var clickElement = FindName("BoardChangeBackgroundColorBtn") as FrameworkElement;
if (clickElement != null)
{ {
Point position = clickElement.TranslatePoint(new Point(0, 0), mainGrid); Point position = clickElement.TranslatePoint(new Point(0, 0), mainGrid);
BackgroundPalette.Margin = new Thickness( BackgroundPalette.Margin = new Thickness(
@@ -549,9 +551,10 @@ namespace Ink_Canvas
{ {
if (modePanel.Children.Count > 1) if (modePanel.Children.Count > 1)
{ {
var whiteboardButton = modePanel.Children[0] as Border;
var blackboardButton = modePanel.Children[1] as Border; var blackboardButton = modePanel.Children[1] as Border;
if (modePanel.Children[0] is Border whiteboardButton && whiteboardButton.Child is TextBlock whiteboardText) if (whiteboardButton != null && whiteboardButton.Child is TextBlock whiteboardText)
{ {
whiteboardButton.Background = Settings.Canvas.UsingWhiteboard ? whiteboardButton.Background = Settings.Canvas.UsingWhiteboard ?
new SolidColorBrush(Color.FromRgb(0x25, 0x63, 0xeb)) : new SolidColorBrush(Color.FromRgb(0x25, 0x63, 0xeb)) :
+3 -2
View File
@@ -85,8 +85,9 @@ namespace Ink_Canvas
// 根据橡皮擦形状选择对应的图像资源 // 根据橡皮擦形状选择对应的图像资源
string resourceKey = isEraserCircleShape ? "EllipseEraserImageSource" : "RectangleEraserImageSource"; string resourceKey = isEraserCircleShape ? "EllipseEraserImageSource" : "RectangleEraserImageSource";
var imageSource = TryFindResource(resourceKey) as DrawingImage;
if (TryFindResource(resourceKey) is DrawingImage imageSource)
if (imageSource != null)
{ {
eraserFeedback.Source = imageSource; eraserFeedback.Source = imageSource;
} }
@@ -53,7 +53,8 @@ namespace Ink_Canvas
foreach (var kvp in Settings.Automation.FloatingWindowInterceptor.InterceptRules) foreach (var kvp in Settings.Automation.FloatingWindowInterceptor.InterceptRules)
{ {
var toggleName = $"ToggleSwitch{kvp.Key}"; var toggleName = $"ToggleSwitch{kvp.Key}";
if (FindName(toggleName) is ToggleSwitch toggle) var toggle = FindName(toggleName) as ToggleSwitch;
if (toggle != null)
{ {
toggle.IsOn = kvp.Value; toggle.IsOn = kvp.Value;
} }
+2 -1
View File
@@ -2895,7 +2895,8 @@ namespace Ink_Canvas
private async void UpdateChannelSelector_Checked(object sender, RoutedEventArgs e) private async void UpdateChannelSelector_Checked(object sender, RoutedEventArgs e)
{ {
if (!isLoaded) return; if (!isLoaded) return;
if (sender is RadioButton radioButton) var radioButton = sender as RadioButton;
if (radioButton != null)
{ {
string channel = radioButton.Tag.ToString(); string channel = radioButton.Tag.ToString();
UpdateChannel newChannel = channel == "Beta" ? UpdateChannel.Beta : UpdateChannel.Release; UpdateChannel newChannel = channel == "Beta" ? UpdateChannel.Beta : UpdateChannel.Release;
+13 -4
View File
@@ -489,16 +489,20 @@ namespace Ink_Canvas
{ {
SetCursorBasedOnEditingMode(inkCanvas); SetCursorBasedOnEditingMode(inkCanvas);
} }
// 修复:几何绘制模式下完全禁止触摸轨迹收集
if (drawingShapeMode != 0) if (drawingShapeMode != 0)
{ {
// 确保几何绘制模式下不切换到Ink模式,避免触摸轨迹被收集
inkCanvas.EditingMode = InkCanvasEditingMode.None; inkCanvas.EditingMode = InkCanvasEditingMode.None;
if (isWaitUntilNextTouchDown && dec.Count > 1) return; if (isWaitUntilNextTouchDown && dec.Count > 1) return;
if (dec.Count > 1) if (dec.Count > 1)
{ {
// 修复:双曲线绘制时,多指触摸不应该删除第一笔的辅助线
if ((drawingShapeMode == 24 || drawingShapeMode == 25) && drawMultiStepShapeCurrentStep == 1) if ((drawingShapeMode == 24 || drawingShapeMode == 25) && drawMultiStepShapeCurrentStep == 1)
{ {
// 第二笔绘制双曲线时,只删除第二笔的临时笔画,保留第一笔的辅助线
try try
{ {
inkCanvas.Strokes.Remove(lastTempStroke); inkCanvas.Strokes.Remove(lastTempStroke);
@@ -519,10 +523,13 @@ namespace Ink_Canvas
} }
return; return;
} }
// 修复:双曲线绘制时,第二笔应该基于第一笔的起点,而不是触摸实时位置
Point touchPoint = e.GetTouchPoint(inkCanvas).Position; Point touchPoint = e.GetTouchPoint(inkCanvas).Position;
if ((drawingShapeMode == 24 || drawingShapeMode == 25) && drawMultiStepShapeCurrentStep == 1) if ((drawingShapeMode == 24 || drawingShapeMode == 25) && drawMultiStepShapeCurrentStep == 1)
{ {
// 第二笔绘制双曲线时,使用触摸位置作为终点,但保持第一笔的起点
// 这里不需要特殊处理,因为MouseTouchMove函数内部已经正确处理了双曲线的绘制逻辑
MouseTouchMove(touchPoint); MouseTouchMove(touchPoint);
} }
else else
@@ -531,13 +538,15 @@ namespace Ink_Canvas
MouseTouchMove(touchPoint); MouseTouchMove(touchPoint);
} }
return; return; // 处理完几何绘制后直接返回,不执行后面的代码
} }
// 其它模式下,允许橡皮、套索、批注等正常工作,不覆盖EditingMode
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint || if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint ||
inkCanvas.EditingMode == InkCanvasEditingMode.Select || inkCanvas.EditingMode == InkCanvasEditingMode.Select ||
inkCanvas.EditingMode == InkCanvasEditingMode.Ink) inkCanvas.EditingMode == InkCanvasEditingMode.Ink)
{ {
// 允许正常橡皮、套索、批注
} }
} }
+9 -5
View File
@@ -211,18 +211,22 @@ namespace Ink_Canvas
// 获取全局快捷键管理器 // 获取全局快捷键管理器
var hotkeyManagerField = typeof(MainWindow).GetField("_globalHotkeyManager", var hotkeyManagerField = typeof(MainWindow).GetField("_globalHotkeyManager",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
var hotkeyManager = hotkeyManagerField?.GetValue(mainWin) as GlobalHotkeyManager;
if (hotkeyManagerField?.GetValue(mainWin) is GlobalHotkeyManager hotkeyManager)
if (hotkeyManager != null)
{ {
// 禁用所有快捷键 // 禁用所有快捷键
hotkeyManager.DisableHotkeyRegistration(); hotkeyManager.DisableHotkeyRegistration();
// 更新菜单项文本和状态 // 更新菜单项文本和状态
if (sender is MenuItem menuItem) var menuItem = sender as MenuItem;
if (menuItem != null)
{ {
if (menuItem.Header is SimpleStackPanel headerPanel) var headerPanel = menuItem.Header as SimpleStackPanel;
if (headerPanel != null)
{ {
if (headerPanel.Children[0] is TextBlock textBlock) var textBlock = headerPanel.Children[0] as TextBlock;
if (textBlock != null)
{ {
if (textBlock.Text == "禁用所有快捷键") if (textBlock.Text == "禁用所有快捷键")
{ {
@@ -517,17 +517,18 @@ namespace Ink_Canvas
private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{ {
// 检查是否点击了UI元素,如果是则不处理选择 // 检查是否点击了UI元素,如果是则不处理选择
if (e.Source is FrameworkElement hitElement && ( var hitElement = e.Source as FrameworkElement;
hitElement is Ellipse || if (hitElement != null && (
hitElement is System.Windows.Controls.Button || hitElement is Ellipse ||
hitElement is Border || hitElement is System.Windows.Controls.Button ||
hitElement is TextBlock || hitElement is Border ||
hitElement is StackPanel || hitElement is TextBlock ||
hitElement is Separator || hitElement is StackPanel ||
hitElement.Name == "SizeInfoBorder" || hitElement is Separator ||
hitElement.Name == "HintText" || hitElement.Name == "SizeInfoBorder" ||
hitElement.Name == "AdjustModeHint" || hitElement.Name == "HintText" ||
hitElement.Name == "SelectionRectangle")) hitElement.Name == "AdjustModeHint" ||
hitElement.Name == "SelectionRectangle"))
{ {
return; return;
} }
@@ -440,14 +440,16 @@ namespace Ink_Canvas.Windows
private void ToggleSwitch_Click(object sender, MouseButtonEventArgs e) private void ToggleSwitch_Click(object sender, MouseButtonEventArgs e)
{ {
if (sender is Border border) var border = sender as Border;
if (border != null)
{ {
// 切换开关状态 // 切换开关状态
bool isOn = border.Background.ToString() == "#FF3584E4"; bool isOn = border.Background.ToString() == "#FF3584E4";
border.Background = isOn ? new SolidColorBrush(Color.FromRgb(225, 225, 225)) : new SolidColorBrush(Color.FromRgb(53, 132, 228)); border.Background = isOn ? new SolidColorBrush(Color.FromRgb(225, 225, 225)) : new SolidColorBrush(Color.FromRgb(53, 132, 228));
// 切换内部圆点的位置 // 切换内部圆点的位置
if (border.Child is Border innerBorder) var innerBorder = border.Child as Border;
if (innerBorder != null)
{ {
innerBorder.HorizontalAlignment = isOn ? HorizontalAlignment.Left : HorizontalAlignment.Right; innerBorder.HorizontalAlignment = isOn ? HorizontalAlignment.Left : HorizontalAlignment.Right;
} }
@@ -555,7 +557,8 @@ namespace Ink_Canvas.Windows
private void OptionButton_Click(object sender, MouseButtonEventArgs e) private void OptionButton_Click(object sender, MouseButtonEventArgs e)
{ {
if (sender is Border border) var border = sender as Border;
if (border != null)
{ {
string tag = border.Tag?.ToString(); string tag = border.Tag?.ToString();
if (!string.IsNullOrEmpty(tag)) if (!string.IsNullOrEmpty(tag))
@@ -565,7 +568,8 @@ namespace Ink_Canvas.Windows
// 设置当前按钮为选中状态 // 设置当前按钮为选中状态
border.Background = new SolidColorBrush(Color.FromRgb(225, 225, 225)); border.Background = new SolidColorBrush(Color.FromRgb(225, 225, 225));
if (border.Child is TextBlock textBlock) var textBlock = border.Child as TextBlock;
if (textBlock != null)
{ {
textBlock.FontWeight = FontWeights.Bold; textBlock.FontWeight = FontWeights.Bold;
} }
@@ -579,7 +583,8 @@ namespace Ink_Canvas.Windows
private void ClearOtherOptionsInGroup(Border currentBorder, string currentTag) private void ClearOtherOptionsInGroup(Border currentBorder, string currentTag)
{ {
// 获取当前按钮所在的父容器 // 获取当前按钮所在的父容器
if (currentBorder.Parent is StackPanel parent) var parent = currentBorder.Parent as StackPanel;
if (parent != null)
{ {
// 获取组名(Tag中下划线前的部分) // 获取组名(Tag中下划线前的部分)
string groupName = currentTag.Split('_')[0]; string groupName = currentTag.Split('_')[0];
@@ -593,7 +598,8 @@ namespace Ink_Canvas.Windows
if (!string.IsNullOrEmpty(childTag) && childTag.StartsWith(groupName + "_")) if (!string.IsNullOrEmpty(childTag) && childTag.StartsWith(groupName + "_"))
{ {
border.Background = new SolidColorBrush(Colors.Transparent); border.Background = new SolidColorBrush(Colors.Transparent);
if (border.Child is TextBlock textBlock) var textBlock = border.Child as TextBlock;
if (textBlock != null)
{ {
textBlock.FontWeight = FontWeights.Normal; textBlock.FontWeight = FontWeights.Normal;
} }
@@ -770,7 +776,8 @@ namespace Ink_Canvas.Windows
if (child is Border border && border.Background != null) if (child is Border border && border.Background != null)
{ {
if (border.Background is SolidColorBrush brush && brush.Color.ToString() == "#FFDEDEDE") var brush = border.Background as SolidColorBrush;
if (brush != null && brush.Color.ToString() == "#FFDEDEDE")
{ {
return border; return border;
} }
@@ -793,7 +800,8 @@ namespace Ink_Canvas.Windows
if (child is Border border && border.Background != null) if (child is Border border && border.Background != null)
{ {
if (border.Background is SolidColorBrush brush && brush.Color.ToString() == "#FF3584E4") var brush = border.Background as SolidColorBrush;
if (brush != null && brush.Color.ToString() == "#FF3584E4")
{ {
return border; return border;
} }
@@ -951,7 +959,8 @@ namespace Ink_Canvas.Windows
var relativePosition = Math.Max(0, Math.Min(1, adjustedX / effectiveWidth)); var relativePosition = Math.Max(0, Math.Min(1, adjustedX / effectiveWidth));
// 更新滑块位置 // 更新滑块位置
if (!(customSlider.ThumbImage.RenderTransform is TranslateTransform thumbTransform)) var thumbTransform = customSlider.ThumbImage.RenderTransform as TranslateTransform;
if (thumbTransform == null)
{ {
thumbTransform = new TranslateTransform(); thumbTransform = new TranslateTransform();
customSlider.ThumbImage.RenderTransform = thumbTransform; customSlider.ThumbImage.RenderTransform = thumbTransform;