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 } }