| Controls/IconTabItem.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Controls/InnerWindow.xaml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Controls/InnerWindow.xaml.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| MainWindow.xaml.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Models/Program.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Models/Sequence.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Models/Step.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Models/Variable.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| UI/Test/ProgramList.xaml.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| UI/WorkControl.xaml.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Utils/Resize.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| test.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Controls/IconTabItem.cs
@@ -7,7 +7,7 @@ namespace WPFProject.Controls { public class IconTabItem : TabItem , INotifyPropertyChanged public class IconTabItem : TabItem, INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; @@ -44,7 +44,6 @@ set => _Body = value; } private BitmapImage _icon; public BitmapImage Icon { get { return (BitmapImage)GetValue(IconProperty); } Controls/InnerWindow.xaml
@@ -8,7 +8,6 @@ mc:Ignorable="d" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" SizeChanged="UserControl_SizeChanged" MouseLeftButtonDown="Grid_MouseLeftButtonDown" Background="#FFF" Focusable="True"> Controls/InnerWindow.xaml.cs
@@ -1,4 +1,5 @@ using System; using 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 MainWindow.xaml.cs
@@ -2,6 +2,7 @@ using System.Windows; using System.Windows.Media; using WPFProject.Events; using WPFProject.Utils; namespace WPFProject { @@ -27,12 +28,12 @@ private void Window_Loaded(object sender, RoutedEventArgs e) { // Resize.SetIsResizeable(this, true); } private void mainControl_OnTabChange(object sender, RoutedEventArgs e) { string ss = "s"; } private void Button_Click_2(object sender, RoutedEventArgs e) Models/Program.cs
@@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; namespace WPFProject.Models { @@ -20,6 +21,16 @@ } /// <summary> /// 序列集合 /// </summary> private ObservableCollection<Sequence> _Sequences = new ObservableCollection<Sequence>(); public ObservableCollection<Sequence> Sequences { get { return _Sequences; } set => RaiseAndSetIfChanged(ref _Sequences, value); } /// <summary> /// 程序所需参数 /// </summary> private ObservableCollection<Variable> _Variables; @@ -30,34 +41,36 @@ } /// <summary> /// 序列集合 /// 初始参数参数 /// </summary> private ObservableCollection<Sequence> _Sequences; public ObservableCollection<Sequence> Sequences private Dictionary<string, Variable> _InitVars; [XmlIgnore] public Dictionary<string, Variable> InitVars { get { return _Sequences; } set => RaiseAndSetIfChanged(ref _Sequences, value); } /// <summary> /// 所需参数 /// </summary> private Dictionary<string, Variable> _Vars; public Dictionary<string, Variable> Vars { get { return _Vars; } set { _Vars = value; } get { return _InitVars; } set { _InitVars = value; } } /// <summary> /// 计算临时参数 /// </summary> private Dictionary<string, Variable> _TempVars; [XmlIgnore] public Dictionary<string, Variable> TempVars { get { return _TempVars; } set { _TempVars = value; } } public Program AddSequnce(params Sequence[] sequences) { foreach (Sequence sequence in sequences) { if (sequence == null) continue; sequence.Program = this; Sequences.Add(sequence); } return this; } } } Models/Sequence.cs
@@ -1,9 +1,5 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections.ObjectModel; using System.Xml.Serialization; namespace WPFProject.Models { @@ -15,12 +11,14 @@ { get { return _Name; } set => RaiseAndSetIfChanged(ref _Name, value); } } [XmlIgnore] public Program Program { get; set; } private ObservableCollection<Step> _Steps = new ObservableCollection<Step> { new Step{ Name="000"}, new Step{ Name="111"} private ObservableCollection<Step> _Steps = new ObservableCollection<Step>() { new Step{ Name = "000"},new Step{ Name="111"} }; public ObservableCollection<Step> Steps { @@ -28,5 +26,16 @@ set => RaiseAndSetIfChanged(ref _Steps, value); } public Sequence AddStep(params Step[] steps) { foreach (Step step in steps) { if (step == null) continue; step.Program = Program; Steps.Add(step); } return this; } } } Models/Step.cs
@@ -1,14 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; namespace WPFProject.Models { public class Step : NotifyBase { #region 字段 [XmlIgnore] public Program Program { get; set; } private int _Index; public int Index Models/Variable.cs
@@ -4,55 +4,58 @@ using System.Security.Policy; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; namespace WPFProject.Models { public class Variable : NotifyBase { /// <summary> /// 参数名 /// </summary> private string _Name; public string Name { get { return _Name; } set => RaiseAndSetIfChanged(ref _Name, value); } /// <summary> /// 参数名 /// </summary> private string _Name; public string Name { get { return _Name; } set => RaiseAndSetIfChanged(ref _Name, value); } /// <summary> /// 参数类型 /// </summary> private string _TypeName; public string TypeName { get { return _TypeName; } set { RaiseAndSetIfChanged(ref _TypeName, value); Type = value == null ? null : Type.GetType(value); } } /// <summary> /// 参数类型 /// </summary> private string _TypeName; public string TypeName { get { return _TypeName; } set { RaiseAndSetIfChanged(ref _TypeName, value); Type = value == null ? null : Type.GetType(value); } } public Type Type { get; private set; } [XmlIgnore] public Type Type { get; private set; } /// <summary> /// 值字符 /// </summary> private string _ValueStr; public string ValueStr { get { return _ValueStr; } set => RaiseAndSetIfChanged(ref _ValueStr, value); } /// <summary> /// 值字符 /// </summary> private string _ValueStr; public string ValueStr { get { return _ValueStr; } set => RaiseAndSetIfChanged(ref _ValueStr, value); } /// <summary> /// 参数值 /// </summary> private object _Value; public object Value { get { return _Value; } set { _Value = value; } } /// <summary> /// 参数值 /// </summary> private object _Value; public object Value { get { return _Value; } set { _Value = value; } } } } } UI/Test/ProgramList.xaml.cs
@@ -31,35 +31,21 @@ } } private ObservableCollection<Program> _Programs = new ObservableCollection<Program> { new Program{ Name="123", Sequences = new ObservableCollection<Sequence> { new Sequence{ new Program{ Name="123"}.AddSequnce(new Sequence{ Name="S123" }, new Sequence },new Sequence { Name="S223" } } }, new Program{ Name="223", Sequences = new ObservableCollection<Sequence> { new Sequence{ }), new Program{ Name="223"}.AddSequnce(new Sequence{ Name="D123" }, new Sequence },new Sequence { Name="D223" } } } }) }; public ObservableCollection<Program> Programs { get { return _Programs; } UI/WorkControl.xaml.cs
@@ -1,231 +1,287 @@ using System; using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using WPFProject.Controls; using WPFProject.Models; using WPFProject.UI.Test; using WPFProject.Utils; namespace WPFProject.UI { /// <summary> /// WorkControl.xaml 的交互逻辑 /// </summary> public partial class WorkControl : UserControl,IPlugin { public WorkControl() { InitializeComponent(); Loaded += UserControl_Loaded; } private List<CanvasPosition> InitGridSize() { List<CanvasPosition> result = new List<CanvasPosition>(); result.Add(new CanvasPosition { Left = 0, Top = 0, Width = 0.1 * ActualWidth -2, Height = 0.5 * ActualHeight - 2 }); result.Add(new CanvasPosition { Left = 0.1*ActualWidth +2, Top = 0, Width = 0.5* ActualWidth -4, Height = ActualHeight, }); result.Add(new CanvasPosition { Left = 0.6*ActualWidth+2, Top = 0, Width = 0.4*ActualWidth-2, Height = 0.5 * ActualHeight - 2 }); result.Add(new CanvasPosition { Left = 0, Top = 0.5*ActualHeight+2, Width = 0.1 * ActualWidth - 2, Height = 0.5 * ActualHeight - 2 }); result.Add(new CanvasPosition { Left = 0.6 * ActualWidth + 2, Top = 0.5 * ActualHeight + 2, Width = 0.4 * ActualWidth - 2, Height = 0.5 * ActualHeight - 2 }); return result; } private void UserControl_Loaded(object sender, RoutedEventArgs e) { List<CanvasPosition> pos = InitGridSize(); ProgramList programList = new ProgramList(); InnerWindow p = new InnerWindow(pos[0]) { Title = "程序列表", Content = programList }; HandleInnerWindow(p); InnerWindow p1 = new InnerWindow(pos[1]) { Title = "图片", }; HandleInnerWindow(p1); SequnceList sequnceList = new SequnceList(); programList.ProgramChanged += sequnceList.Selected_Program_Changed; InnerWindow p2 = new InnerWindow(pos[2]) { Title = "序列", Content = sequnceList }; HandleInnerWindow(p2); FunctionSetting functionSetting = new FunctionSetting(); InnerWindow p3 = new InnerWindow(pos[3]) { Title = "函数", Content = functionSetting }; HandleInnerWindow(p3); StepSetting stepSetting = new StepSetting(); InnerWindow p4 = new InnerWindow(pos[4]) { Title = "单步设置", Content = stepSetting }; HandleInnerWindow(p4); SizeChanged += WorkControl_SizeChanged; Loaded -= UserControl_Loaded; } public int CanvasChildrenCount { get; private set; } = 0; private void HandleInnerWindow(InnerWindow inner) { inner.MinEvent += InnerWindowMin; inner.MaxEvent += InnerWindowMax; inner.ZIndexEvent += Inner_ZIndexEvent; inner.GotFocus += Inner_GotFocus; inner.AttachToCanvas(WorkArea); inner.Zindex = CanvasChildrenCount++; using System; using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using WPFProject.Controls; using WPFProject.Models; using WPFProject.UI.Test; using WPFProject.Utils; namespace WPFProject.UI { /// <summary> /// WorkControl.xaml 的交互逻辑 /// </summary> public partial class WorkControl : UserControl, IPlugin { public WorkControl() { InitializeComponent(); Loaded += UserControl_Loaded; } private List<CanvasPosition> InitGridSize() { List<CanvasPosition> result = new List<CanvasPosition>(); result.Add(new CanvasPosition { Left = 0, Top = 0, Width = 0.1 * ActualWidth - 2, Height = 0.5 * ActualHeight - 2 }); result.Add(new CanvasPosition { Left = 0.1 * ActualWidth + 2, Top = 0, Width = 0.5 * ActualWidth - 4, Height = ActualHeight, }); result.Add(new CanvasPosition { Left = 0.6 * ActualWidth + 2, Top = 0, Width = 0.4 * ActualWidth - 2, Height = 0.5 * ActualHeight - 2 }); result.Add(new CanvasPosition { Left = 0, Top = 0.5 * ActualHeight + 2, Width = 0.1 * ActualWidth - 2, Height = 0.5 * ActualHeight - 2 }); result.Add(new CanvasPosition { Left = 0.6 * ActualWidth + 2, Top = 0.5 * ActualHeight + 2, Width = 0.4 * ActualWidth - 2, Height = 0.5 * ActualHeight - 2 }); return result; } private void UserControl_Loaded(object sender, RoutedEventArgs e) { List<CanvasPosition> pos = InitGridSize(); ProgramList programList = new ProgramList(); InnerWindow p = new InnerWindow(pos[0]) { Title = "程序列表", Content = programList }; HandleInnerWindow(p); InnerWindow p1 = new InnerWindow(pos[1]) { Title = "图片", }; HandleInnerWindow(p1); SequnceList sequnceList = new SequnceList(); programList.ProgramChanged += sequnceList.Selected_Program_Changed; InnerWindow p2 = new InnerWindow(pos[2]) { Title = "序列", Content = sequnceList }; HandleInnerWindow(p2); FunctionSetting functionSetting = new FunctionSetting(); InnerWindow p3 = new InnerWindow(pos[3]) { Title = "函数", Content = functionSetting }; HandleInnerWindow(p3); StepSetting stepSetting = new StepSetting(); InnerWindow p4 = new InnerWindow(pos[4]) { Title = "单步设置", Content = stepSetting }; HandleInnerWindow(p4); SizeChanged += WorkControl_SizeChanged; Loaded -= UserControl_Loaded; } public int CanvasChildrenCount { get; private set; } = 0; #region InnerWindow操作逻辑 /// <summary> /// 设置InnerWindow /// </summary> /// <param name="inner"></param> private void HandleInnerWindow(InnerWindow inner) { inner.MinEvent += InnerWindowMin; inner.MaxEvent += InnerWindowMax; inner.ZIndexEvent += Inner_ZIndexEvent; inner.GotFocus += Inner_GotFocus; inner.AttachToCanvas(WorkArea); inner.Zindex = CanvasChildrenCount++; } /// <summary> /// InnerWindow焦点事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Inner_GotFocus(object sender, RoutedEventArgs e) { CanvasHelper.SetTopZIndex(sender as InnerWindow, WorkArea, typeof(InnerWindow)); } private void Inner_ZIndexEvent(object sender, EventArgs e) { CanvasHelper.SetTopZIndex(sender as InnerWindow, WorkArea, typeof(InnerWindow)); } private void HandleMinInnerWindow(InnerWindow inner) { MinInnerWindow min = new MinInnerWindow(inner); min.MaxEvent += MinInnerWindowMax; min.CloseEvent += MinInnerWindowClose; BottomBar.AddMinWindow(min); } private void InnerWindowMin(object sender, System.EventArgs e) { InnerWindow inner = sender as InnerWindow; inner.Visibility = Visibility.Collapsed; HandleMinInnerWindow(inner); } private void InnerWindowMax(object sender, System.EventArgs e) { InnerWindow inner = sender as InnerWindow; if (inner.WindowState == WindowState.Maximized) { Canvas.SetLeft(inner, inner.canvasPosition.Left); Canvas.SetTop(inner, inner.canvasPosition.Top); inner.Width = inner.canvasPosition.Width; inner.Height = inner.canvasPosition.Height; inner.WindowState = WindowState.Normal; } else{ Canvas.SetLeft(inner, 0); Canvas.SetTop(inner, 0); inner.Width = WorkArea.ActualWidth; inner.Height = WorkArea.ActualHeight; inner.WindowState = WindowState.Maximized; } } private void MinInnerWindowMax(object sender, System.EventArgs e) { MinInnerWindow min = sender as MinInnerWindow; min.Inner.Visibility = Visibility.Visible; CanvasHelper.SetTopZIndex(min.Inner, WorkArea, typeof(InnerWindow)); BottomBar.RemoveMinWindow(min); } private void MinInnerWindowClose(object sender, System.EventArgs e) { MinInnerWindow min = sender as MinInnerWindow; BottomBar.RemoveMinWindow(min); } private void WorkControl_SizeChanged(object sender, SizeChangedEventArgs e) { Size newSize = e.NewSize; Size previousSize = e.PreviousSize; for (int i = 0; i < VisualTreeHelper.GetChildrenCount(WorkArea); i++) { UIElement child = VisualTreeHelper.GetChild(WorkArea, i) as UIElement; if (Canvas.GetLeft(child) >= newSize.Width) { Canvas.SetLeft(child, Canvas.GetLeft(child) + newSize.Width - previousSize.Width); } if (Canvas.GetTop(child) >= newSize.Height) { Canvas.SetTop(child, Canvas.GetTop(child) + newSize.Height - previousSize.Height); } } } public void OnTabChange(object sender, SelectionChangedEventArgs args) { if (args.AddedItems.Count > 0) { IconTabItem newTab = args.AddedItems[0] as IconTabItem; if (newTab != null && newTab.Content == this) { } } if (args.RemovedItems.Count > 0) { IconTabItem oldTab = args.RemovedItems[0] as IconTabItem; if (oldTab != null && oldTab.Content == this) { } } } } } /// <summary> /// InnerWindow ZIndex切换事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Inner_ZIndexEvent(object sender, EventArgs e) { CanvasHelper.SetTopZIndex(sender as InnerWindow, WorkArea, typeof(InnerWindow)); } /// <summary> /// InnerWindow最小化事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void InnerWindowMin(object sender, System.EventArgs e) { InnerWindow inner = sender as InnerWindow; inner.Visibility = Visibility.Collapsed; HandleMinInnerWindow(inner); } /// <summary> /// InnerWindow最大化事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void InnerWindowMax(object sender, System.EventArgs e) { InnerWindow inner = sender as InnerWindow; if (inner.WindowState == WindowState.Maximized) { Canvas.SetLeft(inner, inner.canvasPosition.Left); Canvas.SetTop(inner, inner.canvasPosition.Top); inner.Width = inner.canvasPosition.Width; inner.Height = inner.canvasPosition.Height; inner.WindowState = WindowState.Normal; } else { Canvas.SetLeft(inner, 0); Canvas.SetTop(inner, 0); inner.Width = WorkArea.ActualWidth; inner.Height = WorkArea.ActualHeight; inner.WindowState = WindowState.Maximized; } } /// <summary> /// 重设大小 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void WorkControl_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; //for (int i = 0; i < VisualTreeHelper.GetChildrenCount(WorkArea); i++) //{ // UIElement child = VisualTreeHelper.GetChild(WorkArea, i) as UIElement; // Canvas.SetLeft(child, Canvas.GetLeft(child) * xRate); // Canvas.SetTop(child, Canvas.GetTop(child) * yRate); //} //for (int i = 0; i < VisualTreeHelper.GetChildrenCount(WorkArea); i++) //{ // UIElement child = VisualTreeHelper.GetChild(WorkArea, i) as UIElement; // if (Canvas.GetLeft(child) >= newSize.Width) // { // Canvas.SetLeft(child, Canvas.GetLeft(child) + newSize.Width - previousSize.Width); // } // if (Canvas.GetTop(child) >= newSize.Height) // { // Canvas.SetTop(child, Canvas.GetTop(child) + newSize.Height - previousSize.Height); // } //} } #endregion #region 底部MinInnerWindow相关 /// <summary> /// 底部MinInnerWindow处理 /// </summary> /// <param name="inner"></param> private void HandleMinInnerWindow(InnerWindow inner) { MinInnerWindow min = new MinInnerWindow(inner); min.MaxEvent += MinInnerWindowMax; min.CloseEvent += MinInnerWindowClose; BottomBar.AddMinWindow(min); } /// <summary> /// 底部MinInnerWindow展开 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MinInnerWindowMax(object sender, System.EventArgs e) { MinInnerWindow min = sender as MinInnerWindow; min.Inner.Visibility = Visibility.Visible; CanvasHelper.SetTopZIndex(min.Inner, WorkArea, typeof(InnerWindow)); BottomBar.RemoveMinWindow(min); } /// <summary> /// 底部MinInnerWin关闭 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MinInnerWindowClose(object sender, System.EventArgs e) { MinInnerWindow min = sender as MinInnerWindow; BottomBar.RemoveMinWindow(min); } #endregion public void OnTabChange(object sender, SelectionChangedEventArgs args) { if (args.AddedItems.Count > 0) { IconTabItem newTab = args.AddedItems[0] as IconTabItem; if (newTab != null && newTab.Content == this) { } } if (args.RemovedItems.Count > 0) { IconTabItem oldTab = args.RemovedItems[0] as IconTabItem; if (oldTab != null && oldTab.Content == this) { } } } } } Utils/Resize.cs
@@ -346,6 +346,8 @@ if (_resizeType == ResizeType.Canvas && _resizeTarget is InnerWindow _inner) { Canvas parent = GetCanvas(_inner); // 如果是个InnerWindow,就把InnerWindowZIndex置顶 // TODO 可以改成接口或者DependencyPrope来做 CanvasHelper.SetTopZIndex(_inner, parent, _inner.GetType()); } } @@ -415,42 +417,80 @@ return; } double oldLeft = double.IsNaN(Canvas.GetLeft(target)) ? 0 : Canvas.GetLeft(target), oldTop = double.IsNaN(Canvas.GetTop(target)) ? 0 : Canvas.GetTop(target), oldWidth = double.IsNaN(target.ActualWidth) ? 0 : target.ActualWidth, oldHeight = double.IsNaN(target.ActualHeight) ? 0 : target.ActualHeight; double left, top, width, height; if (thumb.HorizontalAlignment == HorizontalAlignment.Left) double x = e.HorizontalChange, y = e.VerticalChange; bool toLeft = x < 0, toTop = y < 0; bool isLeft = thumb.HorizontalAlignment == HorizontalAlignment.Left, isTop = thumb.VerticalAlignment == VerticalAlignment.Top; if (isLeft) { left = double.IsNaN(Canvas.GetLeft(target)) ? 0 : Canvas.GetLeft(target) + e.HorizontalChange; width = (double.IsNaN(target.ActualWidth) ? 0 : target.ActualWidth) - e.HorizontalChange; // 左侧的拖拽 left = oldLeft + x; width = oldWidth - x; if (left < 0) { left = 0; width = oldWidth - (left - oldLeft); } width = width < MinWidth ? MinWidth : width; } else { left = Canvas.GetLeft(target); width = (double.IsNaN(target.ActualWidth) ? 0 : target.ActualWidth) + e.HorizontalChange; // 右侧的拖拽 left = oldLeft >= 0 ? oldLeft : 0; width = oldWidth + x; width = width < MinWidth ? MinWidth : width; if (left + width > parent.ActualWidth) width = parent.ActualWidth - left; } if (thumb.VerticalAlignment == VerticalAlignment.Top) if (isTop) { top = double.IsNaN(Canvas.GetTop(target)) ? 0 : Canvas.GetTop(target) + e.VerticalChange; height = (double.IsNaN(target.ActualHeight) ? 0 : target.ActualHeight) - e.VerticalChange; // 上边的拖拽 top = oldTop + y; height = oldHeight - y; if (top < 0) { top = 0; height = oldHeight - (top - oldTop); } height = height < MinHeight ? MinHeight : height; } else { top = Canvas.GetTop(target); height = (double.IsNaN(target.ActualHeight) ? 0 : target.ActualHeight) + e.VerticalChange; // 下边的拖拽 top = oldTop > 0 ? oldTop : 0; height = oldHeight + y; height = height < MinHeight ? MinHeight : height; if (top + height > parent.ActualHeight) height = parent.ActualHeight - top; } if (thumb.HorizontalAlignment != HorizontalAlignment.Center && thumb.HorizontalAlignment != HorizontalAlignment.Stretch) if (thumb.HorizontalAlignment != HorizontalAlignment.Center && thumb.HorizontalAlignment != HorizontalAlignment.Stretch) { if (e.HorizontalChange > 0 || (width >= MinWidth && left >= 0)) { Canvas.SetLeft(target, left); target.Width = width; } // 水平方向最终判断 Canvas.SetLeft(target, left); target.Width = width; //if ((isLeft && toLeft && left >= 0) || // (isLeft && !toLeft && width >= MinWidth) || // (!isLeft && toLeft && width >= MinWidth) || // (!isLeft && !toLeft && (left + width) <= parent.ActualWidth)) //{ // Canvas.SetLeft(target, left); // target.Width = width; //} } if (thumb.VerticalAlignment != VerticalAlignment.Center && thumb.VerticalAlignment != VerticalAlignment.Stretch) if (thumb.VerticalAlignment != VerticalAlignment.Center && thumb.VerticalAlignment != VerticalAlignment.Stretch) { if (e.VerticalChange > 0 || (height >= MinHeight && top >= 0)) { Canvas.SetTop(target, top); target.Height = height; } // 垂直方向最终判断 Canvas.SetTop(target, top); target.Height = height; //if ((isTop && toTop && top >= 0) || // (isTop && !toTop && height >= MinHeight) || // (!isTop && toTop && height >= MinHeight) || // (!isTop && !toTop && (top + height) <= parent.ActualHeight)) //{ // Canvas.SetTop(target, top); // target.Height = height; //} } } break; test.xml
@@ -7,9 +7,11 @@ <Name>S123</Name> <Steps> <Step> <Index>0</Index> <Name>000</Name> </Step> <Step> <Index>0</Index> <Name>111</Name> </Step> </Steps> @@ -18,9 +20,11 @@ <Name>S223</Name> <Steps> <Step> <Index>0</Index> <Name>000</Name> </Step> <Step> <Index>0</Index> <Name>111</Name> </Step> </Steps> @@ -34,9 +38,11 @@ <Name>D123</Name> <Steps> <Step> <Index>0</Index> <Name>000</Name> </Step> <Step> <Index>0</Index> <Name>111</Name> </Step> </Steps> @@ -45,9 +51,11 @@ <Name>D223</Name> <Steps> <Step> <Index>0</Index> <Name>000</Name> </Step> <Step> <Index>0</Index> <Name>111</Name> </Step> </Steps>