From 40213047b1cee48144c5a1eee1778ada6f609ca1 Mon Sep 17 00:00:00 2001
From: chr <chrry550@163.com>
Date: 星期四, 07 三月 2024 16:06:08 +0800
Subject: [PATCH] 优化InnerWindow的Resize;
---
Controls/InnerWindow.xaml.cs | 130 ++++++++++++++++++++-----------------------
1 files changed, 60 insertions(+), 70 deletions(-)
diff --git a/Controls/InnerWindow.xaml.cs b/Controls/InnerWindow.xaml.cs
index 6de3db6..6c89b76 100644
--- a/Controls/InnerWindow.xaml.cs
+++ b/Controls/InnerWindow.xaml.cs
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing HandyControl.Controls;
+using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
@@ -19,7 +20,8 @@
/// InnerWindow.xaml 鐨勪氦浜掗�昏緫
/// </summary>
public partial class InnerWindow : UserControl, INotifyPropertyChanged
- {
+ {
+ #region INotifyPropertyChanged
public virtual event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged(string name)
@@ -34,41 +36,46 @@
{
RaisePropertyChanged(propertyName);
}
- }
-
- public CanvasPosition canvasPosition;
-
+ }
+ #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 => VisualTreeHelper.GetChild(this, 0) as AdornerDecorator; }
+
+ private string _Title;
+ public string Title
+ {
+ get { return _Title; }
+ set => RaiseAndSetIfChanged(ref _Title, value);
+ }
+
public int Zindex
{
- get {
+ get
+ {
return Canvas.GetZIndex(this);
}
set
{
Canvas.SetZIndex(this, value);
- }
- }
-
- public AdornerDecorator ResizeAdornerDecorator { get => VisualTreeHelper.GetChild(this, 0) as AdornerDecorator; }
-
-
+ }
+ }
+ #endregion
+
+ #region 浜嬩欢
public event EventHandler MinEvent;
public event EventHandler MaxEvent;
public event EventHandler CloseEvent;
- public event EventHandler ZIndexEvent;
-
- public WindowState WindowState { get; set; } = WindowState.Normal;
-
- private string _Title;
-
- public string Title
- {
- get { return _Title; }
- set => RaiseAndSetIfChanged(ref _Title, value);
- }
-
+ public event EventHandler ZIndexEvent;
+ #endregion
+
+ #region DependencyProperty
public Brush HeaderBackground
{
get { return (Brush)GetValue(HeaderBackgroundProperty); }
@@ -87,8 +94,11 @@
public static readonly DependencyProperty HeaderFontColorProperty =
DependencyProperty.Register("HeaderFontColor", typeof(Brush), typeof(ProgramList),
- new PropertyMetadata(new SolidColorBrush(Color.FromRgb(255, 255, 225))));
-
+ new PropertyMetadata(new SolidColorBrush(Color.FromRgb(255, 255, 225))));
+ #endregion
+
+ #endregion
+
public InnerWindow() : this(null)
{
@@ -105,26 +115,7 @@
DataContext = this;
InitializeComponent();
- SizeChanged += InnerWindow_SizeChanged;
Loaded += InnerWindow_Loaded;
- }
-
- private void InnerWindow_SizeChanged(object sender, SizeChangedEventArgs e)
- {
- //throw new NotImplementedException();
- }
-
- private void InitThumb()
- {
-
- }
-
- // 鏂瑰舰宸ュ巶
- FrameworkElementFactory GetFactory(Brush back)
- {
- FrameworkElementFactory fac = new FrameworkElementFactory(typeof(Rectangle));
- fac.SetValue(Rectangle.FillProperty, back);
- return fac;
}
private void InnerWindow_Loaded(object sender, RoutedEventArgs e)
@@ -140,15 +131,9 @@
};
}
Loaded -= InnerWindow_Loaded;
- }
-
- private Canvas canvas;
-
- private void Button_Click(object sender, RoutedEventArgs e)
- {
- Visibility = Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
- }
-
+ }
+
+ #region 鎷栨嫿绉诲姩鐩稿叧
private void DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
switch (DragType)
@@ -194,12 +179,8 @@
{
canvasPosition.Top = Canvas.GetTop(this);
canvasPosition.Left = Canvas.GetLeft(this);
- }
-
- private void UserControl_SizeChanged(object sender, SizeChangedEventArgs e)
- {
-
- }
+ }
+ #endregion
/// <summary>
/// 娣诲姞鍒扮敾甯冧笂
@@ -223,8 +204,23 @@
}
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 Min_Click(object sender, RoutedEventArgs e)
{
MinEvent?.Invoke(this, null);
@@ -254,12 +250,6 @@
{
}
- }
-
- public class InnerWindowProp : NotifyBase
- {
-
-
}
public enum DragType
--
Gitblit v1.9.1