From 66d63fdba521b25294e7dc488a02e7d65b956022 Mon Sep 17 00:00:00 2001 From: fyf Date: Mon, 19 Sep 2022 17:14:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=A7=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeDesignerSCADA/Controls/MainCanvasPanel.xaml | 294 ++++++++++++++ .../Controls/MainCanvasPanel.xaml.cs | 359 ++++++++++++++++++ BeDesignerSCADA/MainTest.xaml | 13 + BeDesignerSCADA/MainTest.xaml.cs | 30 ++ BeDesignerSCADA/MainWindow.xaml.cs | 3 +- BeDesignerSCADA/Themes/Styles.xaml | 14 +- WPFDemo/WPFDemo.csproj | 1 + 7 files changed, 706 insertions(+), 8 deletions(-) create mode 100644 BeDesignerSCADA/Controls/MainCanvasPanel.xaml create mode 100644 BeDesignerSCADA/Controls/MainCanvasPanel.xaml.cs create mode 100644 BeDesignerSCADA/MainTest.xaml create mode 100644 BeDesignerSCADA/MainTest.xaml.cs diff --git a/BeDesignerSCADA/Controls/MainCanvasPanel.xaml b/BeDesignerSCADA/Controls/MainCanvasPanel.xaml new file mode 100644 index 00000000..9b56aae9 --- /dev/null +++ b/BeDesignerSCADA/Controls/MainCanvasPanel.xaml @@ -0,0 +1,294 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 绑定: + + + + + + + + + + + + + + + + + + + + diff --git a/BeDesignerSCADA/Controls/MainCanvasPanel.xaml.cs b/BeDesignerSCADA/Controls/MainCanvasPanel.xaml.cs new file mode 100644 index 00000000..8d4337a3 --- /dev/null +++ b/BeDesignerSCADA/Controls/MainCanvasPanel.xaml.cs @@ -0,0 +1,359 @@ +using BeDesignerSCADA.ViewModel; +using BeDesignerSCADA.ViewModel; +using BPASmart.Model; +using BPASmartClient.Compiler; +using BPASmartClient.DATABUS; +using BPASmartClient.MessageName; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Forms; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace BeDesignerSCADA.Controls +{ + /// + /// MainCanvasPanel.xaml 的交互逻辑 + /// + public partial class MainCanvasPanel : System.Windows.Controls.UserControl + { + /// + /// 布局文件路径 + /// + public string Path=string.Empty; + MainViewModel viewModel = new MainViewModel(); + public MainCanvasPanel(string _Path) + { + InitializeComponent(); + Path= _Path; + this.DataContext = viewModel; + viewModel.Loaded(cav, runCanvas); + //控件加载 + Assembly assembly = Assembly.LoadFile($"{System.AppDomain.CurrentDomain.BaseDirectory}\\BPASmartClient.SCADAControl.dll"); //Assembly.GetExecutingAssembly(); + var controls = assembly.GetTypes().Where(t => t.GetInterface("IExecutable") != null).OrderBy(o => o.Name); + CtlList.ItemsSource = controls; + //读取文件 + FileRead(_Path); + } + public MainCanvasPanel() + { + InitializeComponent(); + this.DataContext = viewModel; + viewModel.Loaded(cav, runCanvas); + //控件加载 + Assembly assembly = Assembly.LoadFile($"{System.AppDomain.CurrentDomain.BaseDirectory}\\BPASmartClient.SCADAControl.dll"); //Assembly.GetExecutingAssembly(); + var controls = assembly.GetTypes().Where(t => t.GetInterface("IExecutable") != null).OrderBy(o => o.Name); + CtlList.ItemsSource = controls; + } + + #region 位置调整 + /// + /// 左对齐 + /// + /// + /// + private void AglinLeftBtn_Click(object sender, RoutedEventArgs e) + { + cav.AlignLeft(); + } + /// + /// 底部对齐 + /// + /// + /// + private void AglinBottomBtn_Click(object sender, RoutedEventArgs e) + { + cav.AlignBottom(); + } + /// + /// 顶部对齐 + /// + /// + /// + private void AglinTopBtn_Click(object sender, RoutedEventArgs e) + { + cav.AlignTop(); + } + /// + /// 右对齐 + /// + /// + /// + private void AglinRightBtn_Click(object sender, RoutedEventArgs e) + { + cav.AlignRight(); + } + /// + /// 居中 + /// + /// + /// + private void AglinCenterBtn_Click(object sender, RoutedEventArgs e) + { + cav.AlignCenter(); + } + /// + /// 垂直分布 + /// + /// + /// + private void VerticalLayoutBtn_Click(object sender, RoutedEventArgs e) + { + cav.VertialLayout(); + } + /// + /// 水平分布 + /// + /// + /// + private void HorizontalLayoutBtn_Click(object sender, RoutedEventArgs e) + { + cav.HorizontalLayout(); + } + #endregion + + #region 其他事件操作 + /// + /// 运行 + /// + /// + /// + private void RunBtn_Click(object sender, RoutedEventArgs e) + { + if (sender is System.Windows.Controls.Button btn) + { + if (btn.Tag.ToString() == "运行") + { + cav.ClearSelection(); + runCanvas.Run(cav.Generator()); + } + else if (btn.Tag.ToString() == "停止") + { + runCanvas.Destory(); + } + } + } + /// + /// 加载 + /// + /// + /// + private void LoadBtn_Click(object sender, RoutedEventArgs e) + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "布局文件|*.lay"; + if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) + { + cav.Load(ofd.FileName); + } + + DoubleAnimation da = new DoubleAnimation(-200, 0, new Duration(TimeSpan.FromMilliseconds(250))); + da.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseOut }; + CanvasTranslate.BeginAnimation(TranslateTransform.XProperty, da); + + DoubleAnimation daop = new DoubleAnimation(0, 1, new Duration(TimeSpan.FromMilliseconds(250))); + daop.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseOut }; + cav.BeginAnimation(OpacityProperty, daop); + } + /// + /// 读取文件 + /// + /// + public void FileRead(string path) + { + try + { + if (File.Exists(path)) + { + cav.Load(path); + + + DoubleAnimation da = new DoubleAnimation(-200, 0, new Duration(TimeSpan.FromMilliseconds(250))); + da.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseOut }; + CanvasTranslate.BeginAnimation(TranslateTransform.XProperty, da); + + DoubleAnimation daop = new DoubleAnimation(0, 1, new Duration(TimeSpan.FromMilliseconds(250))); + daop.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseOut }; + cav.BeginAnimation(OpacityProperty, daop); + } + } + catch (Exception ex) + { + + } + } + /// + /// 保存文件 + /// + public void FileSave() + { + SaveBtn_Click(null, null); + } + /// + /// 保存 + /// + /// + /// + private void SaveBtn_Click(object sender, RoutedEventArgs e) + { + string str = cav.Save(); + File.WriteAllText(Path, str, Encoding.Unicode); + } + /// + /// 模拟消息发送 + /// + /// + /// + private void MNBtn_Click(object sender, RoutedEventArgs e) + { + + } + #endregion + + #region 左侧控件栏移动 + /// + /// 移动到右侧 + /// + /// + /// + private void CtlList_PreviewMouseMove(object sender, System.Windows.Input.MouseEventArgs e) + { + if (CtlList.SelectedItem != null && e.LeftButton == MouseButtonState.Pressed) + { + DragDrop.DoDragDrop(CtlList, CtlList.SelectedItem, System.Windows.DragDropEffects.Copy); + codeEditor.Text = cav.Save(); + } + } + /// + /// 显示代码 + /// + /// + /// + private void showCode_Click(object sender, RoutedEventArgs e) + { + codeEditor.Text = cav.Save(); + } + /// + /// 编辑 + /// + /// + /// + private void ToggleButton_Click(object sender, RoutedEventArgs e) + { + try + { + if (sender is ToggleButton) + { + ToggleButton toggle = (ToggleButton)sender; + Xceed.Wpf.Toolkit.PropertyGrid.PropertyItem propertyGridCommand = toggle.DataContext as Xceed.Wpf.Toolkit.PropertyGrid.PropertyItem; + if (propertyGridCommand != null) + { + viewModel.Edit(propertyGridCommand); + } + } + } + catch (Exception ex) + { + + } + } + /// + /// 变量选择 + /// + /// + /// + private void ComboBoxValue_TextChanged(object sender, TextChangedEventArgs e) + { + try + { + if (sender is System.Windows.Controls.ComboBox) + { + System.Windows.Controls.ComboBox toggle = (System.Windows.Controls.ComboBox)sender; + Xceed.Wpf.Toolkit.PropertyGrid.PropertyItem propertyGridCommand = toggle.DataContext as Xceed.Wpf.Toolkit.PropertyGrid.PropertyItem; + if (toggle.Tag != null && !string.IsNullOrEmpty(toggle.Text)) + propertyGridCommand.Value = "{" + $"Binding {toggle.Tag}.{toggle.Text}" + "}"; + } + } + catch (Exception ex) + { + + } + } + /// + /// 变量下拉框打开事件 + /// + /// + /// + private void valuebox_DropDownOpened(object sender, EventArgs e) + { + try + { + viewModel.DevValueList = new System.Collections.ObjectModel.ObservableCollection(); + if (sender is System.Windows.Controls.ComboBox) + { + System.Windows.Controls.ComboBox toggle = (System.Windows.Controls.ComboBox)sender; + if (toggle.Tag == null) return; + if (Class_DataBus.GetInstance().Dic_DeviceData.ContainsKey(toggle.Tag.ToString())) + { + Class_DataBus.GetInstance().Dic_DeviceData[toggle.Tag.ToString()].Keys?.ToList().ForEach(key => { viewModel.DevValueList.Add(key); }); + } + } + } + catch (Exception ex) + { + + } + + } + /// + /// 设备名称选择 + /// + /// + /// + private void ComboBoxName_TextChanged(object sender, TextChangedEventArgs e) + { + try + { + if (sender is System.Windows.Controls.ComboBox) + { + System.Windows.Controls.ComboBox toggle = (System.Windows.Controls.ComboBox)sender; + Xceed.Wpf.Toolkit.PropertyGrid.PropertyItem propertyGridCommand = toggle.DataContext as Xceed.Wpf.Toolkit.PropertyGrid.PropertyItem; + if (toggle.Tag != null && !string.IsNullOrEmpty(toggle.Text)) + propertyGridCommand.Value = "{" + $"Binding {toggle.Text}.{toggle.Tag}" + "}"; + else if (!string.IsNullOrEmpty(toggle.Text)) + propertyGridCommand.Value = "{" + $"Binding {toggle.Text}." + "}"; + + } + } + catch (Exception ex) + { + + } + } + /// + /// 设备名称下拉框打开事件 + /// + /// + /// + private void namebox_DropDownOpened(object sender, EventArgs e) + { + viewModel.DevNameList = new System.Collections.ObjectModel.ObservableCollection(); + Class_DataBus.GetInstance().Dic_DeviceData.Keys?.ToList().ForEach(key => { viewModel.DevNameList.Add(key); }); + } + #endregion + } +} diff --git a/BeDesignerSCADA/MainTest.xaml b/BeDesignerSCADA/MainTest.xaml new file mode 100644 index 00000000..aabf5c5c --- /dev/null +++ b/BeDesignerSCADA/MainTest.xaml @@ -0,0 +1,13 @@ + + + + + diff --git a/BeDesignerSCADA/MainTest.xaml.cs b/BeDesignerSCADA/MainTest.xaml.cs new file mode 100644 index 00000000..5536bed8 --- /dev/null +++ b/BeDesignerSCADA/MainTest.xaml.cs @@ -0,0 +1,30 @@ +using BeDesignerSCADA.Controls; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace BeDesignerSCADA +{ + /// + /// MainTest.xaml 的交互逻辑 + /// + public partial class MainTest : Window + { + public MainTest() + { + InitializeComponent(); + MainCanvasPanel mainCanvas=new MainCanvasPanel(@"D:\fengyoufu\代码\Code\C#项目\新上位机代码\BPASmartClient.MinimalistUI\bin\Debug\net6.0-windows\LayoutFile\物料仓管理.lay"); + main.Children.Add(mainCanvas); + } + } +} diff --git a/BeDesignerSCADA/MainWindow.xaml.cs b/BeDesignerSCADA/MainWindow.xaml.cs index 1651888b..c7adfb4d 100644 --- a/BeDesignerSCADA/MainWindow.xaml.cs +++ b/BeDesignerSCADA/MainWindow.xaml.cs @@ -33,6 +33,7 @@ namespace BeDesignerSCADA /// public partial class MainWindow : Window { + MainViewModel viewModel=new MainViewModel(); public MainWindow() { @@ -41,7 +42,7 @@ namespace BeDesignerSCADA viewModel.Loaded(cav, runCanvas); //控件加载 Assembly assembly = Assembly.LoadFile($"{System.AppDomain.CurrentDomain.BaseDirectory}\\BPASmartClient.SCADAControl.dll"); //Assembly.GetExecutingAssembly(); - var controls = assembly.GetTypes().Where(t => t.GetInterface("IExecutable") != null); + var controls = assembly.GetTypes().Where(t => t.GetInterface("IExecutable") != null).OrderBy(o=>o.Name); CtlList.ItemsSource = controls; } diff --git a/BeDesignerSCADA/Themes/Styles.xaml b/BeDesignerSCADA/Themes/Styles.xaml index 3b41d9d1..22c94bb7 100644 --- a/BeDesignerSCADA/Themes/Styles.xaml +++ b/BeDesignerSCADA/Themes/Styles.xaml @@ -235,15 +235,15 @@ - + - + - + @@ -258,22 +258,22 @@ - + - + - + - + diff --git a/WPFDemo/WPFDemo.csproj b/WPFDemo/WPFDemo.csproj index 9f859991..a7f49412 100644 --- a/WPFDemo/WPFDemo.csproj +++ b/WPFDemo/WPFDemo.csproj @@ -20,6 +20,7 @@ +