using System; using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using HMI.Base; using log4net; using WPFProject.Controls; using WPFProject.Models; using WPFProject.Utils; namespace WPFProject.UI { /// /// WorkControl.xaml 的交互逻辑 /// public partial class WorkControl : PluginControl { private ILog log; public WorkControl() { InitializeComponent(); Loaded += UserControl_Loaded; } private List InitGridSize() { List result = new List(); 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 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操作逻辑 /// /// 设置InnerWindow /// /// 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++; } /// /// InnerWindow焦点事件 /// /// /// private void Inner_GotFocus(object sender, RoutedEventArgs e) { CanvasHelper.SetTopZIndex(sender as InnerWindow, WorkArea, typeof(InnerWindow)); } /// /// InnerWindow ZIndex切换事件 /// /// /// private void Inner_ZIndexEvent(object sender, EventArgs e) { CanvasHelper.SetTopZIndex(sender as InnerWindow, WorkArea, typeof(InnerWindow)); } /// /// InnerWindow最小化事件 /// /// /// private void InnerWindowMin(object sender, System.EventArgs e) { InnerWindow inner = sender as InnerWindow; inner.Visibility = Visibility.Collapsed; HandleMinInnerWindow(inner); } /// /// InnerWindow最大化事件 /// /// /// 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 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相关 /// /// 底部MinInnerWindow处理 /// /// private void HandleMinInnerWindow(InnerWindow inner) { MinInnerWindow min = new MinInnerWindow(inner); min.MaxEvent += MinInnerWindowMax; min.CloseEvent += MinInnerWindowClose; BottomBar.AddMinWindow(min); } /// /// 底部MinInnerWindow展开 /// /// /// 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); } /// /// 底部MinInnerWin关闭 /// /// /// 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) { } } } public object Active() { return null; } public object DeActive() { return null; } public void OnTabChange(object sender, object args) { } public object Init() { return null; } public void SetLogger(ILog logger) { log = logger; } } }