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