终端一体化运控平台
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

Silos.xaml.cs 12 KiB

2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. using BPASmartClient.Compiler;
  2. using Newtonsoft.Json;
  3. using System;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using System.Collections.ObjectModel;
  7. using System.ComponentModel;
  8. using System.Drawing.Design;
  9. using System.Linq;
  10. using System.Reflection;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows;
  14. using System.Windows.Controls;
  15. using System.Windows.Data;
  16. using System.Windows.Documents;
  17. using System.Windows.Input;
  18. using System.Windows.Media;
  19. using System.Windows.Media.Animation;
  20. using System.Windows.Media.Imaging;
  21. using System.Windows.Navigation;
  22. using System.Windows.Shapes;
  23. using System.Windows.Threading;
  24. namespace BPASmartClient.SCADAControl.CustomerControls
  25. {
  26. /// <summary>
  27. /// Silos.xaml 的交互逻辑
  28. /// 物料仓
  29. /// </summary>
  30. public partial class Silos :UserControl, IExecutable, IDisposable
  31. {
  32. #region 临时变量
  33. TextBlock textBlockCLKZ = null;
  34. TextBlock textBlockValue = null;
  35. TextBlock textBlockText = null;
  36. TextBlock textBlockTitle = null;
  37. Ellipse ellipseControl = null;
  38. Storyboard storyboard = new Storyboard();
  39. #endregion
  40. public Silos()
  41. {
  42. InitializeComponent();
  43. Width = 180;
  44. Height = 270;
  45. this.DataContext = this;
  46. this.SizeChanged += Silos_SizeChanged; ;
  47. }
  48. public string ControlType => "物料仓";
  49. private bool isExecuteState;
  50. public bool IsExecuteState
  51. {
  52. get { return isExecuteState; }
  53. set
  54. {
  55. isExecuteState = value;
  56. if (IsExecuteState)
  57. {
  58. IsEnabled = true;
  59. Register();
  60. //Style = null;
  61. }
  62. }
  63. }
  64. #region 动画
  65. /// <summary>
  66. /// 加载内部变量
  67. /// </summary>
  68. private void Silos_SizeChanged(object sender,SizeChangedEventArgs e)
  69. {
  70. //查找
  71. if (ellipseControl == null)
  72. {
  73. foreach (Ellipse tb in FindVisualChildren<Ellipse>(this))
  74. {
  75. // do something with tb here
  76. if (tb.Tag != null)
  77. {
  78. if (tb.Tag.ToString() == "出料圆")
  79. {
  80. ellipseControl = tb;
  81. storyboard.RepeatBehavior = RepeatBehavior.Forever;
  82. DoubleAnimationUsingKeyFrames animation = new DoubleAnimationUsingKeyFrames();
  83. Storyboard.SetTarget(animation,ellipseControl);
  84. Storyboard.SetTargetProperty(animation,new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"));
  85. animation.KeyFrames.Add(new EasingDoubleKeyFrame(0,KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0))));
  86. animation.KeyFrames.Add(new EasingDoubleKeyFrame(180,KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1))));
  87. animation.KeyFrames.Add(new EasingDoubleKeyFrame(360,KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2))));
  88. storyboard.Children.Add(animation);
  89. }
  90. }
  91. }
  92. foreach (TextBlock tb in FindVisualChildren<TextBlock>(this))
  93. {
  94. // do something with tb here
  95. if (tb.Tag != null)
  96. {
  97. if (tb.Tag.ToString() == "出料控制")
  98. {
  99. textBlockCLKZ = tb;
  100. }
  101. else if (tb.Tag.ToString() == "Value")
  102. {
  103. textBlockValue = tb;
  104. }
  105. else if (tb.Tag.ToString() == "Text")
  106. {
  107. textBlockText = tb;
  108. }
  109. else if (tb.Tag.ToString() == "Title")
  110. {
  111. textBlockTitle = tb;
  112. }
  113. }
  114. }
  115. foreach (StackPanel tb in FindVisualChildren<StackPanel>(this))
  116. {
  117. // do something with tb here
  118. if (tb.Tag != null)
  119. {
  120. if (tb.Tag.ToString() == "ControlEvent")
  121. {
  122. foreach (var item in tb.Children)
  123. {
  124. if (item is Image)
  125. {
  126. (item as Image).MouseLeftButtonDown += Image_MouseLeftButtonDown; ;
  127. }
  128. }
  129. }
  130. }
  131. }
  132. TargetRefresh();
  133. }
  134. }
  135. public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
  136. {
  137. if (depObj != null)
  138. {
  139. for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
  140. {
  141. DependencyObject child = VisualTreeHelper.GetChild(depObj,i);
  142. if (child != null && child is T)
  143. {
  144. yield return (T)child;
  145. }
  146. foreach (T childOfChild in FindVisualChildren<T>(child))
  147. {
  148. yield return childOfChild;
  149. }
  150. }
  151. }
  152. }
  153. #endregion
  154. #region 属性
  155. [Category("值设定")]
  156. public string KgValue
  157. {
  158. get { return (string)GetValue(KgValueProperty); }
  159. set { SetValue(KgValueProperty, value); }
  160. }
  161. public static readonly DependencyProperty KgValueProperty =
  162. DependencyProperty.Register("KgValue", typeof(string),typeof(Silos),new PropertyMetadata(new PropertyChangedCallback(onTargetChanged)));
  163. private static void onTargetChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) => (d as Silos)?.TargetRefresh();
  164. [Category("值设定")]
  165. public string WLText
  166. {
  167. get { return (string)GetValue(WLTextProperty); }
  168. set { SetValue(WLTextProperty, value); }
  169. }
  170. public static readonly DependencyProperty WLTextProperty =
  171. DependencyProperty.Register("WLText", typeof(string),typeof(Silos),new PropertyMetadata(new PropertyChangedCallback(onTargetChanged)));
  172. [Category("值设定")]
  173. public string WLTitle
  174. {
  175. get { return (string)GetValue(WLTitleProperty); }
  176. set { SetValue(WLTitleProperty, value); }
  177. }
  178. public static readonly DependencyProperty WLTitleProperty =
  179. DependencyProperty.Register("WLTitle", typeof(string),typeof(Silos),new PropertyMetadata(new PropertyChangedCallback(onTargetChanged)));
  180. [Category("值设定")]
  181. public int Direction
  182. {
  183. get { return (int)GetValue(DirectionProperty); }
  184. set { SetValue(DirectionProperty,value); }
  185. }
  186. public static readonly DependencyProperty DirectionProperty =
  187. DependencyProperty.Register("Direction",typeof(int),typeof(Silos),
  188. new PropertyMetadata(0,new PropertyChangedCallback(OnPropertyChanged)));
  189. private static void OnPropertyChanged(DependencyObject d,DependencyPropertyChangedEventArgs e)
  190. {
  191. (d as Silos)?.Refresh();
  192. }
  193. #endregion
  194. #region 数据绑定模块
  195. public string SendText
  196. {
  197. get { return (string)GetValue(SendTextProperty); }
  198. set { SetValue(SendTextProperty, value); }
  199. }
  200. public static readonly DependencyProperty SendTextProperty =
  201. DependencyProperty.Register("SendText", typeof(string), typeof(Silos), new PropertyMetadata(string.Empty));
  202. public string ChuLiaoExecute
  203. {
  204. get { return (string)GetValue(ChuLiaoExecuteProperty); }
  205. set { SetValue(ChuLiaoExecuteProperty, value); }
  206. }
  207. public static readonly DependencyProperty ChuLiaoExecuteProperty =
  208. DependencyProperty.Register("ChuLiaoExecute", typeof(string), typeof(Silos), new PropertyMetadata(string.Empty));
  209. public string StopChuLiaoExecute
  210. {
  211. get { return (string)GetValue(StopChuLiaoExecuteProperty); }
  212. set { SetValue(StopChuLiaoExecuteProperty, value); }
  213. }
  214. public static readonly DependencyProperty StopChuLiaoExecuteProperty =
  215. DependencyProperty.Register("StopChuLiaoExecute", typeof(string), typeof(Silos), new PropertyMetadata(string.Empty));
  216. public string ValueChangedExecute
  217. {
  218. get { return (string)GetValue(ValueChangedExecuteProperty); }
  219. set { SetValue(ValueChangedExecuteProperty, value); }
  220. }
  221. public static readonly DependencyProperty ValueChangedExecuteProperty =
  222. DependencyProperty.Register("ValueChangedExecute", typeof(string), typeof(Silos), new PropertyMetadata(string.Empty));
  223. public event EventHandler PropertyChange; //声明一个事件
  224. /// <summary>
  225. /// 数据模板
  226. /// </summary>
  227. private Dictionary<string, object> DataModel
  228. {
  229. get { return (Dictionary<string, object>)GetValue(DataModelProperty); }
  230. set { SetValue(DataModelProperty, value); }
  231. }
  232. private static readonly DependencyProperty DataModelProperty =
  233. DependencyProperty.Register("DataModel", typeof(Dictionary<string, object>), typeof(Silos), new PropertyMetadata(new Dictionary<string, object>()));
  234. #endregion
  235. #region 函数
  236. /// <summary>
  237. /// 目标属性刷新
  238. /// </summary>
  239. public void TargetRefresh()
  240. {
  241. if (textBlockValue != null && textBlockText != null && textBlockTitle != null)
  242. {
  243. textBlockValue.Text = KgValue;
  244. textBlockText.Text = WLText;
  245. textBlockTitle.Text = WLTitle;
  246. }
  247. }
  248. /// <summary>
  249. /// 值变化刷新
  250. /// </summary>
  251. public void Refresh()
  252. {
  253. if (ellipseControl != null)
  254. {
  255. if (Direction == 1)
  256. {
  257. ellipseControl.Visibility = Visibility.Visible;
  258. textBlockCLKZ.Visibility = Visibility.Visible;
  259. storyboard.Begin();
  260. }
  261. else if (Direction == 2)
  262. {
  263. ellipseControl.Visibility = Visibility.Collapsed;
  264. textBlockCLKZ.Visibility = Visibility.Collapsed;
  265. storyboard.Stop();
  266. }
  267. else
  268. {
  269. ellipseControl.Visibility = Visibility.Collapsed;
  270. textBlockCLKZ.Visibility = Visibility.Collapsed;
  271. storyboard.Stop();
  272. }
  273. }
  274. }
  275. #endregion
  276. #region 运行事件
  277. List<string> MessageNameL = null;
  278. public void Register()
  279. {
  280. Class_DataBus.GetInstance().BindingAction += BindingActionHeader;
  281. }
  282. public void BindingActionHeader(object sender, EventArgs e)
  283. {
  284. this.Dispatcher.Invoke((Action)(() =>
  285. {
  286. DataModel = Class_DataBus.GetInstance().Dic_RedisDataBinding;
  287. PropertyChange?.Invoke(this, EventArgs.Empty);
  288. }));
  289. }
  290. #endregion
  291. #region 发送消息事件
  292. public void Dispose()
  293. {
  294. }
  295. private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  296. {
  297. try
  298. {
  299. Image image = sender as Image;
  300. if (image.Tag != null)
  301. {
  302. if (image.Tag.ToString() == "出料")
  303. {
  304. Config.GetInstance().RunJsScipt(ChuLiaoExecute);
  305. }
  306. else if (image.Tag.ToString() == "停止出料")
  307. {
  308. Config.GetInstance().RunJsScipt(StopChuLiaoExecute);
  309. }
  310. }
  311. }
  312. catch (Exception ex)
  313. {
  314. }
  315. }
  316. #endregion
  317. }
  318. }