From 9d1660270272180cd71147d6ddd53d1382643d2e Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 18:00:14 +0800
Subject: [PATCH] merge: 并入远程 Initial commit 作为历史根节点
---
HMI.UI/MDI/InnerWindow.xaml.cs | 267 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 267 insertions(+), 0 deletions(-)
diff --git a/HMI.UI/MDI/InnerWindow.xaml.cs b/HMI.UI/MDI/InnerWindow.xaml.cs
new file mode 100644
index 0000000..ad0a0f4
--- /dev/null
+++ b/HMI.UI/MDI/InnerWindow.xaml.cs
@@ -0,0 +1,267 @@
+锘縰sing HMI.UI.DpUtil;
+using System;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+
+namespace HMI.UI.MDI
+{
+ /// <summary>
+ /// InnerWindow.xaml 鐨勪氦浜掗�昏緫
+ /// </summary>
+ public partial class InnerWindow : UserControl, INotifyPropertyChanged
+ {
+ #region INotifyPropertyChanged
+ public virtual event PropertyChangedEventHandler PropertyChanged;
+
+ protected virtual void RaisePropertyChanged(string name)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+ }
+
+ protected void RaiseAndSetIfChanged<T>(ref T old, T @new, [CallerMemberName] string propertyName = null)
+ {
+ old = @new;
+ if (propertyName != null)
+ {
+ RaisePropertyChanged(propertyName);
+ }
+ }
+ #endregion
+
+ #region 灞炴��
+
+ #region Common
+ public DragType DragType { get; set; } = DragType.Canvas;
+ public CanvasPosition canvasPosition;
+ private Canvas canvas;
+ public WindowState WindowState { get; set; } = WindowState.Normal;
+ public AdornerDecorator ResizeAdornerDecorator
+ {
+ get
+ {
+ return this.Template.FindName("PART_Adorner", this) as AdornerDecorator;
+ }
+ }
+
+ private string _Title;
+ public string Title
+ {
+ get { return _Title; }
+ set => RaiseAndSetIfChanged(ref _Title, value);
+ }
+
+ public int Zindex
+ {
+ get
+ {
+ return Canvas.GetZIndex(this);
+ }
+ set
+ {
+ Canvas.SetZIndex(this, value);
+ }
+ }
+ #endregion
+
+ #region 浜嬩欢
+ public event EventHandler MinEvent;
+ public event EventHandler MaxEvent;
+ public event EventHandler LockEvent;
+ public event EventHandler CloseEvent;
+ public event EventHandler ZIndexEvent;
+ #endregion
+
+ #region DependencyProperty
+ public Brush HeaderBackground
+ {
+ get { return (Brush)GetValue(HeaderBackgroundProperty); }
+ set { SetValue(HeaderBackgroundProperty, value); }
+ }
+
+ public static readonly DependencyProperty HeaderBackgroundProperty =
+ DependencyProperty.Register("HeaderBackground", typeof(Brush), typeof(InnerWindow),
+ new PropertyMetadata(new SolidColorBrush(Color.FromRgb(54, 146, 225))));
+
+ public Brush HeaderFontColor
+ {
+ get { return (Brush)GetValue(HeaderFontColorProperty); }
+ set { SetValue(HeaderFontColorProperty, value); }
+ }
+
+ public static readonly DependencyProperty HeaderFontColorProperty =
+ DependencyProperty.Register("HeaderFontColor", typeof(Brush), typeof(InnerWindow),
+ new PropertyMetadata(new SolidColorBrush(Color.FromRgb(255, 255, 225))));
+ #endregion
+
+ #endregion
+
+ public InnerWindow()
+ {
+ DataContext = this;
+ InitializeComponent();
+ Loaded += InnerWindow_Loaded;
+ }
+
+ public static readonly DependencyProperty CanResizeProperty = DependencyProperty.Register(
+ "CanResize",
+ typeof(bool),
+ typeof(InnerWindow),
+ new FrameworkPropertyMetadata(true, new PropertyChangedCallback(OnCanResizeChanged)));
+
+ private static void OnCanResizeChanged(DependencyObject dp, DependencyPropertyChangedEventArgs e)
+ {
+ bool val = (bool)e.NewValue;
+ Resize.SetIsResizeable(dp, val);
+ Resize.SetCanMove(dp, val);
+ }
+
+ public bool CanResize
+ {
+ get => (bool)GetValue(CanResizeProperty);
+ set => SetValue(CanResizeProperty, value);
+ }
+
+ private void InnerWindow_Loaded(object sender, RoutedEventArgs e)
+ {
+ Loaded -= InnerWindow_Loaded;
+ }
+
+ #region 鎷栨嫿绉诲姩鐩稿叧
+ private void DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
+ {
+ if (!Resize.GetCanMove(this)) return;
+ switch (DragType)
+ {
+ case DragType.Canvas:
+ {
+ double offsetX = e.HorizontalChange;
+ double offsetY = e.VerticalChange;
+
+ Width = ActualWidth > canvas.ActualWidth ? canvas.ActualWidth : Width;
+ Height = ActualHeight > canvas.ActualHeight ? canvas.ActualHeight : Height;
+
+ double newLeft = Canvas.GetLeft(this) + e.HorizontalChange;
+ newLeft = newLeft < 0 ? 0 : newLeft;
+
+
+ double newTop = Canvas.GetTop(this) + e.VerticalChange;
+ newTop = newTop < 0 ? 0 : newTop;
+
+ double fixLeft = canvasPosition == null || canvasPosition.LimitWidth <= 0 ? ActualWidth : canvasPosition.LimitWidth;
+ double fixTop = canvasPosition == null || canvasPosition.LimitHeight <= 0 ? ActualHeight : canvasPosition.LimitHeight;
+
+ if (canvas != null)
+ {
+ newLeft = offsetX > 0 && newLeft > canvas.ActualWidth - fixLeft ? canvas.ActualWidth - fixLeft : newLeft;
+ newTop = offsetY > 0 && newTop > canvas.ActualHeight - fixTop ? canvas.ActualHeight - fixTop : newTop;
+ }
+
+ Canvas.SetLeft(this, newLeft);
+ Canvas.SetTop(this, newTop);
+ break;
+ }
+ }
+ }
+
+ private void DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e)
+ {
+ ZIndexEvent?.Invoke(this, null);
+ // thumb1.Background = Brushes.White;
+ }
+
+ private void DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
+ {
+ canvasPosition.Top = Canvas.GetTop(this);
+ canvasPosition.Left = Canvas.GetLeft(this);
+ }
+ #endregion
+
+ /// <summary>
+ /// 娣诲姞鍒扮敾甯冧笂
+ /// </summary>
+ /// <param name="canvas"></param>
+ public void AttachToCanvas(Canvas canvas)
+ {
+ canvas.Children.Add(this);
+ this.canvas = canvas;
+ if (ActualWidth < MinWidth)
+ {
+ Width = MinWidth;
+ }
+ if (ActualHeight < MinHeight)
+ {
+ Height = MinHeight;
+ }
+ Canvas.SetLeft(this, canvasPosition == null ? 0 : canvasPosition.Left);
+ Canvas.SetTop(this, canvasPosition == null ? 0 : canvasPosition.Top);
+ canvas.SizeChanged += Canvas_SizeChanged;
+ }
+
+ private void Canvas_SizeChanged(object sender, SizeChangedEventArgs e)
+ {
+ Size newSize = e.NewSize;
+ Size previousSize = e.PreviousSize;
+
+ double xRate = newSize.Width / previousSize.Width;
+ double yRate = newSize.Height / previousSize.Height;
+
+ Canvas.SetLeft(this, Canvas.GetLeft(this) * xRate);
+ Canvas.SetTop(this, Canvas.GetTop(this) * yRate);
+ this.Width = this.Width * xRate;
+ this.Height = this.Height * yRate;
+ }
+
+ private void Lock_Click(object sender, RoutedEventArgs e)
+ {
+ LockEvent?.Invoke(this, null);
+ }
+
+ private void Min_Click(object sender, RoutedEventArgs e)
+ {
+ MinEvent?.Invoke(this, null);
+ }
+
+ private void Max_Click(object sender, RoutedEventArgs e)
+ {
+ MaxEvent?.Invoke(this, null);
+ }
+
+ private void CLose_Click(object sender, RoutedEventArgs e)
+ {
+
+ }
+
+ private void Grid_GotFocus(object sender, RoutedEventArgs e)
+ {
+
+ }
+
+ private void Grid_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
+ {
+ this.Focus();
+ }
+
+ private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+ {
+
+ }
+
+ private void UserControl_SizeChanged(object sender, SizeChangedEventArgs e)
+ {
+
+ }
+ }
+
+ public enum DragType
+ {
+ Canvas = 0,
+ Dock = 1
+ }
+
+}
+
--
Gitblit v1.9.1