130 lines
5.0 KiB
C#
130 lines
5.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Navigation;
|
|
using System.Windows.Shapes;
|
|
using InkCanvasForClass.IccInkCanvas.Settings;
|
|
|
|
namespace InkCanvasForClass.IccInkCanvas {
|
|
/// <summary>
|
|
/// IccBoard.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class IccBoard : UserControl {
|
|
|
|
public BoardSettings BoardSettings { get; private set; } = new BoardSettings();
|
|
|
|
#region Properties
|
|
|
|
private bool _isEditingModePropertyAccessdByCodeBehind = false;
|
|
public EditingMode EditingMode {
|
|
get => (EditingMode)GetValue(EditingModeProperty);
|
|
set {
|
|
if (value == EditingMode.ShapeDrawing) throw new Exception("EditingMode.ShapeDrawing 不能被用户手动设定");
|
|
_isEditingModePropertyAccessdByCodeBehind = true;
|
|
SetValue(EditingModeProperty, value);
|
|
_isEditingModePropertyAccessdByCodeBehind = false;
|
|
UpdateEditingMode();
|
|
}
|
|
}
|
|
public static readonly System.Windows.DependencyProperty EditingModeProperty =
|
|
System.Windows.DependencyProperty.Register(
|
|
nameof(EditingMode),
|
|
typeof(EditingMode),
|
|
typeof(IccBoard),
|
|
new FrameworkPropertyMetadata(EditingMode.Writing,
|
|
FrameworkPropertyMetadataOptions.AffectsRender,
|
|
propertyChangedCallback: OnEditingModePropertyChanged));
|
|
private static void OnEditingModePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
|
|
var iccboard = d as IccBoard;
|
|
if (iccboard != null && iccboard._isEditingModePropertyAccessdByCodeBehind) return;
|
|
iccboard?.UpdateEditingMode();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region EditingMode
|
|
|
|
private void UpdateEditingMode() {
|
|
if (EditingMode == EditingMode.None || EditingMode == EditingMode.NoneWithHitTest)
|
|
InkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
IsHitTestVisible = EditingMode != EditingMode.None;
|
|
if (EditingMode == EditingMode.Writing) InkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Events
|
|
|
|
private static readonly System.Windows.RoutedEvent EditingModeChangedEvent = EventManager.RegisterRoutedEvent(
|
|
name: "EditingModeChanged",
|
|
routingStrategy: RoutingStrategy.Bubble,
|
|
handlerType: typeof(System.Windows.RoutedEventHandler),
|
|
ownerType: typeof(IccBoard));
|
|
private static readonly System.Windows.RoutedEvent ActiveEditingModeChangedEvent = EventManager.RegisterRoutedEvent(
|
|
name: "ActiveEditingModeChanged",
|
|
routingStrategy: RoutingStrategy.Bubble,
|
|
handlerType: typeof(System.Windows.RoutedEventHandler),
|
|
ownerType: typeof(IccBoard));
|
|
|
|
public event System.Windows.RoutedEventHandler EditingModeChanged {
|
|
add => AddHandler(EditingModeChangedEvent, value);
|
|
remove => RemoveHandler(EditingModeChangedEvent, value);
|
|
}
|
|
public event System.Windows.RoutedEventHandler ActiveEditingModeChanged {
|
|
add => AddHandler(ActiveEditingModeChangedEvent, value);
|
|
remove => RemoveHandler(ActiveEditingModeChangedEvent, value);
|
|
}
|
|
|
|
private void RaiseEditingModeChangedEvent() {
|
|
RoutedEventArgs routedEventArgs = new RoutedEventArgs(routedEvent: EditingModeChangedEvent);
|
|
RaiseEvent(routedEventArgs);
|
|
}
|
|
private void RaiseActiveEditingModeChangedEvent() {
|
|
RoutedEventArgs routedEventArgs = new RoutedEventArgs(routedEvent: ActiveEditingModeChangedEvent);
|
|
RaiseEvent(routedEventArgs);
|
|
}
|
|
|
|
#endregion
|
|
|
|
public IccBoard() {
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void IccInkCanvas_Loaded(object sender, RoutedEventArgs e) {
|
|
var ic = (IccInkCanvas)sender;
|
|
|
|
// 启动时自动修改 InkCanvas 的大小
|
|
var screenW = SystemParameters.PrimaryScreenWidth;
|
|
var screenH = SystemParameters.PrimaryScreenHeight;
|
|
|
|
var fullWidth = screenW * 257;
|
|
var fullHeight = screenH * 417;
|
|
|
|
var left = 0 - screenW * 128;
|
|
var top = 0 - screenH * 208;
|
|
|
|
ic.Width = fullWidth;
|
|
ic.Height = fullHeight;
|
|
Canvas.SetLeft(ic, left);
|
|
Canvas.SetTop(ic, top);
|
|
|
|
ic.DefaultDrawingAttributes.Width = BoardSettings.NibWidth;
|
|
ic.DefaultDrawingAttributes.Height = BoardSettings.NibHeight;
|
|
ic.DefaultDrawingAttributes.Color = BoardSettings.NibColor;
|
|
|
|
ic.BoardSettings = BoardSettings;
|
|
}
|
|
|
|
}
|
|
}
|