From 4b8d89854ec676ad7c73b675a68ababab3d5ff27 Mon Sep 17 00:00:00 2001
From: PrefacedCorg <1876568293@qq.com>
Date: Wed, 15 Apr 2026 14:15:05 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow.xaml | 175 ++++--------------
.../MainWindow_cs/MW_FloatingBarIcons.cs | 48 ++---
InkCanvas.Controls/BoardToolbarButton.xaml | 40 ++++
InkCanvas.Controls/BoardToolbarButton.xaml.cs | 156 ++++++++++++++++
4 files changed, 256 insertions(+), 163 deletions(-)
create mode 100644 InkCanvas.Controls/BoardToolbarButton.xaml
create mode 100644 InkCanvas.Controls/BoardToolbarButton.xaml.cs
diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml
index b13d6494..da53d450 100644
--- a/Ink Canvas/MainWindow.xaml
+++ b/Ink Canvas/MainWindow.xaml
@@ -4854,81 +4854,29 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -5514,31 +5445,12 @@
HorizontalAlignment="Center" FontSize="12" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
index 8f2fe6b2..6617fb2d 100644
--- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
+++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
@@ -462,12 +462,12 @@ namespace Ink_Canvas
BoardPen.Background = new SolidColorBrush(Color.FromRgb(42, 42, 42));
BoardSelect.Background = new SolidColorBrush(Color.FromRgb(42, 42, 42));
BoardEraser.Background = new SolidColorBrush(Color.FromRgb(42, 42, 42));
- BoardSelectGeometry.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255));
- BoardPenGeometry.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255));
- BoardEraserGeometry.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255));
- BoardPenLabel.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255));
- BoardSelectLabel.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255));
- BoardEraserLabel.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255));
+ BoardSelect.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255));
+ BoardPen.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255));
+ BoardEraser.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255));
+ BoardPen.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255));
+ BoardSelect.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255));
+ BoardEraser.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255));
BoardSelect.BorderBrush = new SolidColorBrush(Color.FromRgb(85, 85, 85));
BoardEraser.BorderBrush = new SolidColorBrush(Color.FromRgb(85, 85, 85));
BoardPen.BorderBrush = new SolidColorBrush(Color.FromRgb(85, 85, 85));
@@ -477,12 +477,12 @@ namespace Ink_Canvas
BoardPen.Background = new SolidColorBrush(Color.FromRgb(244, 244, 245));
BoardSelect.Background = new SolidColorBrush(Color.FromRgb(244, 244, 245));
BoardEraser.Background = new SolidColorBrush(Color.FromRgb(244, 244, 245));
- BoardSelectGeometry.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27));
- BoardPenGeometry.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27));
- BoardEraserGeometry.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27));
- BoardPenLabel.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27));
- BoardSelectLabel.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27));
- BoardEraserLabel.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27));
+ BoardSelect.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27));
+ BoardPen.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27));
+ BoardEraser.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27));
+ BoardPen.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27));
+ BoardSelect.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27));
+ BoardEraser.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27));
BoardSelect.BorderBrush = new SolidColorBrush(Color.FromRgb(161, 161, 170));
BoardEraser.BorderBrush = new SolidColorBrush(Color.FromRgb(161, 161, 170));
BoardPen.BorderBrush = new SolidColorBrush(Color.FromRgb(161, 161, 170));
@@ -514,8 +514,8 @@ namespace Ink_Canvas
Pen_Icon.Icon.Geometry = Geometry.Parse(GetCorrectIcon("pen", true));
BoardPen.Background = new SolidColorBrush(Color.FromRgb(37, 99, 235));
BoardPen.BorderBrush = new SolidColorBrush(Color.FromRgb(37, 99, 235));
- BoardPenGeometry.Brush = new SolidColorBrush(Colors.GhostWhite);
- BoardPenLabel.Foreground = new SolidColorBrush(Colors.GhostWhite);
+ BoardPen.IconGeometryDrawing.Brush = new SolidColorBrush(Colors.GhostWhite);
+ BoardPen.Foreground = new SolidColorBrush(Colors.GhostWhite);
SetFloatingBarHighlightPosition("pen");
break;
@@ -527,8 +527,8 @@ namespace Ink_Canvas
Geometry.Parse(GetCorrectIcon("eraserCircle", true));
BoardEraser.Background = new SolidColorBrush(Color.FromRgb(37, 99, 235));
BoardEraser.BorderBrush = new SolidColorBrush(Color.FromRgb(37, 99, 235));
- BoardEraserGeometry.Brush = new SolidColorBrush(Colors.GhostWhite);
- BoardEraserLabel.Foreground = new SolidColorBrush(Colors.GhostWhite);
+ BoardEraser.IconGeometryDrawing.Brush = new SolidColorBrush(Colors.GhostWhite);
+ BoardEraser.Foreground = new SolidColorBrush(Colors.GhostWhite);
SetFloatingBarHighlightPosition("eraser");
break;
@@ -540,8 +540,8 @@ namespace Ink_Canvas
Geometry.Parse(GetCorrectIcon("eraserStroke", true));
BoardEraser.Background = new SolidColorBrush(Color.FromRgb(37, 99, 235));
BoardEraser.BorderBrush = new SolidColorBrush(Color.FromRgb(37, 99, 235));
- BoardEraserGeometry.Brush = new SolidColorBrush(Colors.GhostWhite);
- BoardEraserLabel.Foreground = new SolidColorBrush(Colors.GhostWhite);
+ BoardEraser.IconGeometryDrawing.Brush = new SolidColorBrush(Colors.GhostWhite);
+ BoardEraser.Foreground = new SolidColorBrush(Colors.GhostWhite);
SetFloatingBarHighlightPosition("eraserByStrokes");
break;
@@ -553,8 +553,8 @@ namespace Ink_Canvas
Geometry.Parse(GetCorrectIcon("lassoSelect", true));
BoardSelect.Background = new SolidColorBrush(Color.FromRgb(37, 99, 235));
BoardSelect.BorderBrush = new SolidColorBrush(Color.FromRgb(37, 99, 235));
- BoardSelectGeometry.Brush = new SolidColorBrush(Colors.GhostWhite);
- BoardSelectLabel.Foreground = new SolidColorBrush(Colors.GhostWhite);
+ BoardSelect.IconGeometryDrawing.Brush = new SolidColorBrush(Colors.GhostWhite);
+ BoardSelect.Foreground = new SolidColorBrush(Colors.GhostWhite);
SetFloatingBarHighlightPosition("select");
break;
@@ -570,15 +570,15 @@ namespace Ink_Canvas
{
BoardPen.Background = new SolidColorBrush(Color.FromRgb(42, 42, 42));
BoardPen.BorderBrush = new SolidColorBrush(Color.FromRgb(85, 85, 85));
- BoardPenGeometry.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255));
- BoardPenLabel.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255));
+ BoardPen.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255));
+ BoardPen.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255));
}
else
{
BoardPen.Background = new SolidColorBrush(Color.FromRgb(244, 244, 245));
BoardPen.BorderBrush = new SolidColorBrush(Color.FromRgb(161, 161, 170));
- BoardPenGeometry.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27));
- BoardPenLabel.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27));
+ BoardPen.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27));
+ BoardPen.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27));
}
SetFloatingBarHighlightPosition("cursor");
diff --git a/InkCanvas.Controls/BoardToolbarButton.xaml b/InkCanvas.Controls/BoardToolbarButton.xaml
new file mode 100644
index 00000000..e120b1d1
--- /dev/null
+++ b/InkCanvas.Controls/BoardToolbarButton.xaml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/InkCanvas.Controls/BoardToolbarButton.xaml.cs b/InkCanvas.Controls/BoardToolbarButton.xaml.cs
new file mode 100644
index 00000000..3e0b4e9b
--- /dev/null
+++ b/InkCanvas.Controls/BoardToolbarButton.xaml.cs
@@ -0,0 +1,156 @@
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Input;
+using System.Windows.Media;
+
+namespace Ink_Canvas.Controls
+{
+ public enum ButtonPosition
+ {
+ First,
+ Middle,
+ Last,
+ Single
+ }
+
+ public partial class BoardToolbarButton : UserControl
+ {
+ public static readonly DependencyProperty LabelProperty = DependencyProperty.Register(
+ nameof(Label), typeof(string), typeof(BoardToolbarButton),
+ new PropertyMetadata(string.Empty, OnLabelChanged));
+
+ private static void OnLabelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ var button = (BoardToolbarButton)d;
+ button.LabelTextBlock.Text = (string)e.NewValue;
+ }
+
+ public string Label
+ {
+ get => (string)GetValue(LabelProperty);
+ set => SetValue(LabelProperty, value);
+ }
+
+ public static readonly DependencyProperty IconGeometryProperty = DependencyProperty.Register(
+ nameof(IconGeometry), typeof(string), typeof(BoardToolbarButton),
+ new PropertyMetadata(string.Empty, OnIconGeometryChanged));
+
+ private static void OnIconGeometryChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ var button = (BoardToolbarButton)d;
+ if (e.NewValue is string geometry && !string.IsNullOrEmpty(geometry))
+ {
+ button.IconGeometryInternal.Geometry = Geometry.Parse(geometry);
+ }
+ }
+
+ public string IconGeometry
+ {
+ get => (string)GetValue(IconGeometryProperty);
+ set => SetValue(IconGeometryProperty, value);
+ }
+
+ public static readonly DependencyProperty PositionProperty = DependencyProperty.Register(
+ nameof(Position), typeof(ButtonPosition), typeof(BoardToolbarButton),
+ new PropertyMetadata(ButtonPosition.Middle, OnPositionChanged));
+
+ private static void OnPositionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ var button = (BoardToolbarButton)d;
+ button.UpdateCornerRadius((ButtonPosition)e.NewValue);
+ }
+
+ public ButtonPosition Position
+ {
+ get => (ButtonPosition)GetValue(PositionProperty);
+ set => SetValue(PositionProperty, value);
+ }
+
+ public static readonly DependencyProperty IconBrushProperty = DependencyProperty.Register(
+ nameof(IconBrush), typeof(Brush), typeof(BoardToolbarButton),
+ new PropertyMetadata(null, OnIconBrushChanged));
+
+ private static void OnIconBrushChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ var button = (BoardToolbarButton)d;
+ if (e.NewValue is Brush brush)
+ {
+ button.IconGeometryInternal.Brush = brush;
+ }
+ }
+
+ public Brush IconBrush
+ {
+ get => (Brush)GetValue(IconBrushProperty);
+ set => SetValue(IconBrushProperty, value);
+ }
+
+ public event MouseButtonEventHandler ButtonMouseDown;
+ public event MouseButtonEventHandler ButtonMouseUp;
+
+ public GeometryDrawing IconGeometryDrawing => IconGeometryInternal;
+
+ public Border ButtonBorderControl => ButtonBorder;
+
+ public TextBlock LabelTextBlockControl => LabelTextBlock;
+
+ public new Brush Background
+ {
+ get => ButtonBorder.Background;
+ set => ButtonBorder.Background = value;
+ }
+
+ public new Brush BorderBrush
+ {
+ get => ButtonBorder.BorderBrush;
+ set => ButtonBorder.BorderBrush = value;
+ }
+
+ public new Brush Foreground
+ {
+ get => LabelTextBlock.Foreground;
+ set => LabelTextBlock.Foreground = value;
+ }
+
+ public BoardToolbarButton()
+ {
+ InitializeComponent();
+ UpdateCornerRadius(Position);
+ }
+
+ private void UpdateCornerRadius(ButtonPosition position)
+ {
+ if (ButtonBorder == null) return;
+
+ switch (position)
+ {
+ case ButtonPosition.First:
+ ButtonBorder.CornerRadius = new CornerRadius(5, 0, 0, 5);
+ ButtonBorder.BorderThickness = new Thickness(1, 1, 0, 1);
+ break;
+ case ButtonPosition.Middle:
+ ButtonBorder.CornerRadius = new CornerRadius(0);
+ ButtonBorder.BorderThickness = new Thickness(0, 1, 0, 1);
+ break;
+ case ButtonPosition.Last:
+ ButtonBorder.CornerRadius = new CornerRadius(0, 5, 5, 0);
+ ButtonBorder.BorderThickness = new Thickness(0, 1, 1, 1);
+ break;
+ case ButtonPosition.Single:
+ ButtonBorder.CornerRadius = new CornerRadius(5);
+ ButtonBorder.BorderThickness = new Thickness(1);
+ break;
+ }
+ }
+
+ private void ButtonBorder_MouseDown(object sender, MouseButtonEventArgs e)
+ {
+ ButtonMouseDown?.Invoke(this, e);
+ }
+
+ private void ButtonBorder_MouseUp(object sender, MouseButtonEventArgs e)
+ {
+ ButtonMouseUp?.Invoke(this, e);
+ }
+ }
+}