|
- using BPASmartClient.Compiler;
- using BPASmartClient.DATABUS;
- using BPASmartClient.MessageCommunication;
- using BPASmartClient.MessageCommunication.MsgControl;
- using BPASmartClient.MessageName;
- using BPASmartClient.MessageName.EnumHelp;
- using BPASmartClient.MessageName.发送消息Model;
- using BPASmartClient.MessageName.接收消息Model;
- using BPASmartClient.MessageName.接收消息Model.物料仓;
- using Newtonsoft.Json;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.ComponentModel;
- using System.Drawing.Design;
- using System.Linq;
- using System.Reflection;
- 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.Animation;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- using System.Windows.Threading;
-
- namespace BPASmartClient.SCADAControl.CustomerControls
- {
- /// <summary>
- /// Silos.xaml 的交互逻辑
- /// 物料仓
- /// </summary>
- public partial class Silos :UserControl, IExecutable, IDisposable
- {
- #region 临时变量
- TextBlock textBlockCLKZ = null;
- TextBlock textBlockValue = null;
- TextBlock textBlockText = null;
- TextBlock textBlockTitle = null;
-
-
- Ellipse ellipseControl = null;
- Storyboard storyboard = new Storyboard();
-
- object typeName;
- public List<string> typeNameList = new List<string>();
- public Enum @enum = null;
- #endregion
-
- public Silos()
- {
- InitializeComponent();
- this.DataContext = this;
- Width = 180;
- Height = 270;
- this.SizeChanged += Silos_SizeChanged; ;
- this.Loaded += Silos_Loaded;
- }
-
- private void Silos_Loaded(object sender,RoutedEventArgs e)
- {
- EventReceiveNameList.CollectionChanged += EventNameList_CollectionChanged;
- EventSendNameList.CollectionChanged += EventSendNameList_CollectionChanged;
- }
-
- private void EventSendNameList_CollectionChanged(object? sender,System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
- {
- if (EventSendNameList.Count > 0)
- {
- try
- {
- EventSendNameListStr = JsonConvert.SerializeObject(EventSendNameList);
-
- }
- catch (Exception ex)
- {
- }
- }
- }
-
- private void EventNameList_CollectionChanged(object? sender,System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
- {
- if (EventReceiveNameList.Count > 0)
- {
- try
- {
- EventReceiveNameListStr = JsonConvert.SerializeObject(EventReceiveNameList);
-
- }
- catch (Exception ex)
- {
- }
- }
- }
-
- public string ControlType => "物料仓";
- private bool isExecuteState;
- public bool IsExecuteState
- {
- get { return isExecuteState; }
- set
- {
- isExecuteState = value;
- if (IsExecuteState)
- {
- IsEnabled = true;
- Register();
- Style = null;
- }
- }
- }
-
- #region 动画
- /// <summary>
- /// 加载内部变量
- /// </summary>
- private void Silos_SizeChanged(object sender,SizeChangedEventArgs e)
- {
- //查找
- if (ellipseControl == null)
- {
- foreach (Ellipse tb in FindVisualChildren<Ellipse>(this))
- {
- // do something with tb here
- if (tb.Tag != null)
- {
- if (tb.Tag.ToString() == "出料圆")
- {
- ellipseControl = tb;
- storyboard.RepeatBehavior = RepeatBehavior.Forever;
- DoubleAnimationUsingKeyFrames animation = new DoubleAnimationUsingKeyFrames();
- Storyboard.SetTarget(animation,ellipseControl);
- Storyboard.SetTargetProperty(animation,new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"));
- animation.KeyFrames.Add(new EasingDoubleKeyFrame(0,KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0))));
- animation.KeyFrames.Add(new EasingDoubleKeyFrame(180,KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1))));
- animation.KeyFrames.Add(new EasingDoubleKeyFrame(360,KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2))));
- storyboard.Children.Add(animation);
- }
- }
- }
-
- foreach (TextBlock tb in FindVisualChildren<TextBlock>(this))
- {
- // do something with tb here
- if (tb.Tag != null)
- {
- if (tb.Tag.ToString() == "出料控制")
- {
- textBlockCLKZ = tb;
- }
- else if (tb.Tag.ToString() == "Value")
- {
- textBlockValue = tb;
- }
- else if (tb.Tag.ToString() == "Text")
- {
- textBlockText = tb;
- }
- else if (tb.Tag.ToString() == "Title")
- {
- textBlockTitle = tb;
- }
- }
- }
-
- foreach (StackPanel tb in FindVisualChildren<StackPanel>(this))
- {
- // do something with tb here
- if (tb.Tag != null)
- {
- if (tb.Tag.ToString() == "ControlEvent")
- {
- foreach (var item in tb.Children)
- {
- if (item is Image)
- {
- (item as Image).MouseLeftButtonDown += Image_MouseLeftButtonDown;
- if ((item as Image).Tag != null)
- typeNameList.Add((item as Image).Tag?.ToString());
-
- }
- else if (item is Button)
- {
- (item as Button).Click += Button_Click;
- if ((item as Button).Tag != null)
- typeNameList.Add((item as Button).Tag?.ToString());
- }
- else if (item is TextBox)
- {
- (item as TextBox).TextChanged += TextBox_TextChanged;
- if ((item as TextBox).Tag != null)
- typeNameList.Add((item as TextBox).Tag?.ToString());
- }
- else if (item is CheckBox)
- {
- (item as CheckBox).Checked += CheckBox_Checked;
- (item as CheckBox).Unchecked += CheckBox_Unchecked;
- if ((item as CheckBox).Tag != null)
- typeNameList.Add((item as CheckBox).Tag?.ToString());
- }
-
- }
- @enum = EnumExtensions.CreateEnum(typeNameList,$"{this.Name}ControlEunm");
-
- }
- }
- }
- }
-
- }
-
- public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
- {
- if (depObj != null)
- {
- for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
- {
- DependencyObject child = VisualTreeHelper.GetChild(depObj,i);
- if (child != null && child is T)
- {
- yield return (T)child;
- }
-
- foreach (T childOfChild in FindVisualChildren<T>(child))
- {
- yield return childOfChild;
- }
- }
- }
- }
- #endregion
-
- #region 属性
- [Category("值设定")]
- public string Value
- {
- get { return (string)GetValue(ValueProperty); }
- set { SetValue(ValueProperty,value); }
- }
- public static readonly DependencyProperty ValueProperty =
- DependencyProperty.Register("Value",typeof(string),typeof(Silos),new PropertyMetadata(new PropertyChangedCallback(onTargetChanged)));
- private static void onTargetChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) => (d as Silos)?.TargetRefresh();
-
- [Category("值设定")]
- public string Text
- {
- get { return (string)GetValue(TextProperty); }
- set { SetValue(TextProperty,value); }
- }
- public static readonly DependencyProperty TextProperty =
- DependencyProperty.Register("Text",typeof(string),typeof(Silos),new PropertyMetadata(new PropertyChangedCallback(onTargetChanged)));
-
- [Category("值设定")]
- public string Title
- {
- get { return (string)GetValue(TitleProperty); }
- set { SetValue(TitleProperty,value); }
- }
- public static readonly DependencyProperty TitleProperty =
- DependencyProperty.Register("Title",typeof(string),typeof(Silos),new PropertyMetadata(new PropertyChangedCallback(onTargetChanged)));
-
- [Category("值设定")]
- public int Direction
- {
- get { return (int)GetValue(DirectionProperty); }
- set { SetValue(DirectionProperty,value); }
- }
- public static readonly DependencyProperty DirectionProperty =
- DependencyProperty.Register("Direction",typeof(int),typeof(Silos),
- new PropertyMetadata(0,new PropertyChangedCallback(OnPropertyChanged)));
- private static void OnPropertyChanged(DependencyObject d,DependencyPropertyChangedEventArgs e)
- {
- (d as Silos)?.Refresh();
- }
-
- [Category("名称[自动生成]")]
- public string EventReceiveNameListStr
- {
- get { return (string)GetValue(EventReceiveNameListStrProperty); }
- set { SetValue(EventReceiveNameListStrProperty,value); }
- }
- public static readonly DependencyProperty EventReceiveNameListStrProperty =
- DependencyProperty.Register("EventReceiveNameListStr",typeof(string),typeof(Silos),new PropertyMetadata(string.Empty,new PropertyChangedCallback(onEventReceiveNameListStrChanged)));
- private static void onEventReceiveNameListStrChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) => (d as Silos)?.ReceiveNameRefresh();
-
- [Category("消息接收名称集合")]
- public ObservableCollection<EventReceiveMessage> EventReceiveNameList
- {
- get { return (ObservableCollection<EventReceiveMessage>)GetValue(EventReceiveNameListProperty); }
- set { SetValue(EventReceiveNameListProperty,value); }
- }
- public static readonly DependencyProperty EventReceiveNameListProperty =
- DependencyProperty.Register("EventReceiveNameList",typeof(ObservableCollection<EventReceiveMessage>),typeof(Silos),new PropertyMetadata(new ObservableCollection<EventReceiveMessage>(),new PropertyChangedCallback(onEventNameListChanged)));
- [Category("名称[自动生成]")]
- private string EventSendNameListStr
- {
- get { return (string)GetValue(EventSendNameListStrProperty); }
- set { SetValue(EventSendNameListStrProperty,value); }
- }
- private static readonly DependencyProperty EventSendNameListStrProperty =
- DependencyProperty.Register("EventSendNameListStr",typeof(string),typeof(Silos),new PropertyMetadata(string.Empty));
- [Category("消息发送名称集合")]
- private ObservableCollection<EventSendMessage> EventSendNameList
- {
- get { return (ObservableCollection<EventSendMessage>)GetValue(EventSendNameListProperty); }
- set { SetValue(EventSendNameListProperty,value); }
- }
- private static readonly DependencyProperty EventSendNameListProperty =
- DependencyProperty.Register("EventSendNameList",typeof(ObservableCollection<EventSendMessage>),typeof(Silos),new PropertyMetadata(new ObservableCollection<EventSendMessage>(),new PropertyChangedCallback(onEventNameListChanged)));
- private static void onEventNameListChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) => (d as Silos)?.DataNameRefresh();
-
-
- #endregion
-
- #region 数据绑定模块
- public event EventHandler PropertyChange; //声明一个事件
- //[Category("数据绑定-数据来源")]
- //public DataTypeEnum DataSouceType
- //{
- // get { return (DataTypeEnum)GetValue(DataSouceTypeProperty); }
- // set { SetValue(DataSouceTypeProperty,value); }
- //}
- //public static readonly DependencyProperty DataSouceTypeProperty =
- // DependencyProperty.Register("DataSouceType",typeof(DataTypeEnum),typeof(Silos),new PropertyMetadata(DataTypeEnum.静态数据));
- [Category("数据绑定-数据来源")]
- public int TimeCount
- {
- get { return (int)GetValue(TimeCountProperty); }
- set { SetValue(TimeCountProperty,value); }
- }
- public static readonly DependencyProperty TimeCountProperty =
- DependencyProperty.Register("TimeCount",typeof(int),typeof(Silos),new PropertyMetadata(5));
- //[Category("数据绑定-数据来源")]
- //public string DataSouceInformation
- //{
- // get { return (string)GetValue(DataSouceInformationProperty); }
- // set { SetValue(DataSouceInformationProperty,value); }
- //}
- //public static readonly DependencyProperty DataSouceInformationProperty =
- // DependencyProperty.Register("DataSouceInformation",typeof(string),typeof(Silos),new PropertyMetadata(string.Empty));
- //[Category("数据绑定-数据来源")]
- //public string DeviceName
- //{
- // get { return (string)GetValue(DeviceNameProperty); }
- // set { SetValue(DeviceNameProperty,value); }
- //}
- //public static readonly DependencyProperty DeviceNameProperty =
- // DependencyProperty.Register("DeviceName",typeof(string),typeof(Silos),new PropertyMetadata(string.Empty));
- //[Category("数据绑定-数据来源")]
- //public string DeviceValuleName
- //{
- // get { return (string)GetValue(DeviceValuleNameProperty); }
- // set { SetValue(DeviceValuleNameProperty,value); }
- //}
- //public static readonly DependencyProperty DeviceValuleNameProperty =
- // DependencyProperty.Register("DeviceValuleName",typeof(string),typeof(Silos),new PropertyMetadata(string.Empty));
-
- [Category("数据绑定")]
- public string FDataSouce
- {
- get { return (string)GetValue(FDataSouceProperty); }
- set { SetValue(FDataSouceProperty,value); }
- }
- public static readonly DependencyProperty FDataSouceProperty =
- DependencyProperty.Register("FDataSouce",typeof(string),typeof(Silos),new PropertyMetadata(string.Empty,new PropertyChangedCallback(onFDataSouceChanged)));
- private static void onFDataSouceChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) => (d as Silos)?.DataSouceRefresh();
- public void DataSouceRefresh()
- {
- try
- {
- if (!string.IsNullOrEmpty(FDataSouce))
- {
- GenerateData = (string)CSharpConfig.GetInstance().RunCSharp(Code,new object[] { FDataSouce });
- if (PropertyChange != null)
- {
- PropertyChange(this,null);
- }
- }
- }
- catch (Exception ex)
- {
-
- }
- }
- public static string _code = "public string main(string message) \n{ \n //请在此填写你的代码\n\n return message; \n}\n";
- [Category("数据绑定")]
- public string Code
- {
- get { return (string)GetValue(CodeProperty); }
- set { SetValue(CodeProperty,value); }
- }
- public static readonly DependencyProperty CodeProperty =
- DependencyProperty.Register("Code",typeof(string),typeof(Silos),new PropertyMetadata(_code));
- [Category("数据绑定")]
- public string GenerateData
- {
- get { return (string)GetValue(GenerateDataProperty); }
- set { SetValue(GenerateDataProperty,value); }
- }
- public static readonly DependencyProperty GenerateDataProperty =
- DependencyProperty.Register("GenerateData",typeof(string),typeof(Silos),new PropertyMetadata(string.Empty));
- #endregion
-
- #region 发送事件名称集合
- [Category("事件处理")]
- public MessageNameEnum 出料单击事件
- {
- get { return (MessageNameEnum)GetValue(出料单击事件Property); }
- set { SetValue(出料单击事件Property,value); }
- }
- public static readonly DependencyProperty 出料单击事件Property =
- DependencyProperty.Register("出料单击事件",typeof(MessageNameEnum),typeof(Silos),new PropertyMetadata(MessageNameEnum.Null));
- [Category("事件处理")]
- public MessageNameEnum 停止出料单击事件
- {
- get { return (MessageNameEnum)GetValue(停止出料单击事件Property); }
- set { SetValue(停止出料单击事件Property,value); }
- }
- public static readonly DependencyProperty 停止出料单击事件Property =
- DependencyProperty.Register("停止出料单击事件",typeof(MessageNameEnum),typeof(Silos),new PropertyMetadata(MessageNameEnum.Null));
- #endregion
-
- #region 函数
- /// <summary>
- /// 目标属性刷新
- /// </summary>
- public void TargetRefresh()
- {
- if (textBlockValue != null && textBlockText != null && textBlockTitle != null)
- {
- textBlockValue.Text = Value;
- textBlockText.Text = Text;
- textBlockTitle.Text = Title;
- }
- }
-
- /// <summary>
- /// 值变化刷新
- /// </summary>
- public void Refresh()
- {
- if (ellipseControl != null)
- {
- if (Direction == 1)
- {
- ellipseControl.Visibility = Visibility.Visible;
- textBlockCLKZ.Visibility = Visibility.Visible;
- storyboard.Begin();
- }
- else if (Direction == 2)
- {
- ellipseControl.Visibility = Visibility.Collapsed;
- textBlockCLKZ.Visibility = Visibility.Collapsed;
- storyboard.Stop();
- }
- else
- {
- ellipseControl.Visibility = Visibility.Collapsed;
- textBlockCLKZ.Visibility = Visibility.Collapsed;
- storyboard.Stop();
- }
- }
-
- }
-
- /// <summary>
- /// 运行名称变化事件
- /// </summary>
- public void RunNameRefresh()
- {
-
- }
-
- /// <summary>
- /// 数据名称变化事件
- /// </summary>
- public void DataNameRefresh()
- {
-
- }
-
- /// <summary>
- /// 接收数据改变
- /// </summary>
- public void ReceiveNameRefresh()
- {
- if (!string.IsNullOrEmpty(EventReceiveNameListStr))
- {
- try
- {
- EventReceiveNameList = JsonConvert.DeserializeObject<ObservableCollection<EventReceiveMessage>>(EventReceiveNameListStr);
- }
- catch (Exception ex)
- {
-
- }
- }
- }
- #endregion
-
- #region 运行事件
- DispatcherTimer timer = new DispatcherTimer();
- Dictionary<string, string> propertyBing = new Dictionary<string,string>();
- List<string> MessageNameL = null;
- public void Register()
- {
- if (!string.IsNullOrEmpty(EventReceiveNameListStr))
- {
- try
- {
- EventReceiveNameList = JsonConvert.DeserializeObject<ObservableCollection<EventReceiveMessage>>(EventReceiveNameListStr);
- }
- catch (Exception ex)
- {
-
- }
- }
-
- if (!string.IsNullOrEmpty(EventSendNameListStr))
- {
- try
- {
- EventSendNameList = JsonConvert.DeserializeObject<ObservableCollection<EventSendMessage>>(EventSendNameListStr);
- }
- catch (Exception ex)
- {
-
- }
- }
-
- List<string> MessageNameNew = EventReceiveNameList?.Select(o => o.MeaageName.ToString())?.Distinct()?.ToList();
- if (MessageNameL == null || !MessageNameNew.SequenceEqual(MessageNameL))
- {
- MessageNameL?.ForEach(o => Class_InnerMessageBus.GetInstance().RemoveMessage(o,"SliosEventHandler"));
- MessageNameNew?.ForEach(x => Class_InnerMessageBus.GetInstance().ListenMessage(this,x,"SliosEventHandler"));
- MessageNameL = MessageNameNew;
- }
-
- PropertyInfo[] propertyInfos = this.GetType().GetProperties();
- foreach (PropertyInfo propertyInfo in propertyInfos)
- {
- var propName = propertyInfo?.GetValue(this,null);
- if (propName is string && propName != null && propName.ToString().Contains("Binding ") && propName.ToString().Contains("."))
- {
- propertyBing[propertyInfo.Name] = propName.ToString();
- }
- }
-
- timer.Interval = TimeSpan.FromMilliseconds(TimeCount);
- timer.Tick += Timer_Tick; ;
- timer.Start();
-
- }
-
- private void Timer_Tick(object? sender,EventArgs e)
- {
- try
- {
- foreach (var item in propertyBing)
- {
- //{Binding 测试设备.VAR_A_2}
- string[] str= item.Value.Replace("{Binding ","").Replace("}","").Split(".");
- if (str.Length > 1)
- {
- if (Class_DataBus.GetInstance().Dic_DeviceData.ContainsKey(str[0]))
- {
- Dictionary<string,object> b= Class_DataBus.GetInstance().Dic_DeviceData[str[0]];
- if (b!=null && b.ContainsKey(str[1]))
- {
- object _value = b[str[1]];
- this.GetType().GetProperty(item.Key).SetValue(this,_value);
- }
- }
- }
- }
- }
- catch (Exception ex)
- {
-
- }
- }
-
- /// <summary>
- /// 统一事件消息处理中心
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- public void SliosEventHandler(object sender,InnerMessageEventArgs e)
- {
- try
- {
- if (IsExecuteState = true)//正在运行
- {
- if (e.obj_MessageObj is RunEnumModel)//接收到运行消息
- {
- RunEnumModel mode = (RunEnumModel)e.obj_MessageObj;
- var msg = EventReceiveNameList?.ToList().Find(par => par.MeaageName.ToString() == e.str_MessageStr && par.MeaageID == mode.MessageID);
- //必对消息号:
- if (msg != null)
- {
- Direction = mode.Run == RunEnum.Run ? 1 : 2;
- }
- }
- else if (e.obj_MessageObj is SilosMessageModel)//接收到数据模型
- {
- SilosMessageModel mode = (SilosMessageModel)e.obj_MessageObj;
- var msg = EventReceiveNameList?.ToList().Find(par => par.MeaageName.ToString() == e.str_MessageStr && par.MeaageID == mode.MessageID);
- //必对消息号:
- if (msg != null)
- {
- Title = mode.Title;
- Value = mode.Value;
- Text = mode.Text;
- }
- }
- }
- }
- catch (Exception ex)
- {
-
- }
- }
- #endregion
-
- #region 发送消息事件
- public void Dispose()
- {
- timer.Stop();
- }
-
- /// <summary>
- /// 按钮按下
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void Image_MouseLeftButtonDown(object sender,MouseButtonEventArgs e)
- {
- try
- {
- Image image = sender as Image;
- if (image.Tag != null)
- {
- if (image.Tag.ToString() == "出料" && 出料单击事件 != MessageNameEnum.Null)
- {
- EventSendMessage eventSend = new EventSendMessage();
- eventSend.ControlName = this.Name;
- eventSend.ControlTitle = this.Title;
- eventSend.ControlSource = image.Tag.ToString();
- eventSend.EventType = ControlEventType.MouseLeftButtonDown;
- eventSend.MeaageName = 出料单击事件;
- Class_InnerMessageBus.GetInstance().PostMessage(this,出料单击事件.ToString(),eventSend);
- }
- else if (image.Tag.ToString() == "停止出料" && 停止出料单击事件 != MessageNameEnum.Null)
- {
- EventSendMessage eventSend = new EventSendMessage();
- eventSend.ControlName = this.Name;
- eventSend.ControlTitle = this.Title;
- eventSend.ControlSource = image.Tag.ToString();
- eventSend.EventType = ControlEventType.MouseLeftButtonDown;
- eventSend.MeaageName = 停止出料单击事件;
- Class_InnerMessageBus.GetInstance().PostMessage(this,停止出料单击事件.ToString(),eventSend);
- }
- }
- }
- catch (Exception ex)
- {
-
- }
- }
-
- /// <summary>
- /// 按钮类型
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void Button_Click(object sender,RoutedEventArgs e)
- {
-
- }
-
- /// <summary>
- /// 值改变
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void TextBox_TextChanged(object sender,TextChangedEventArgs e)
- {
-
-
- }
-
- /// <summary>
- /// 选中
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void CheckBox_Checked(object sender,RoutedEventArgs e)
- {
-
- }
-
- /// <summary>
- /// 取消选中
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void CheckBox_Unchecked(object sender,RoutedEventArgs e)
- {
-
- }
- #endregion
- }
- }
|