private static void BindingControl(ITagLink taglink, List <TagNodeHandle> valueChangedList, ExpressionEval eval) { var ctrl = taglink as UIElement; if (ctrl == null) { return; } var complex = taglink as ITagReader; if (complex != null) { string txt = complex.TagReadText; if (!string.IsNullOrEmpty(txt)) { foreach (var v in txt.GetListFromText()) { ITagLink tagConn = complex; string[] strs = v.Key.Split('.'); if (strs.Length > 1) { for (int i = 0; i < strs.Length - 1; i++) { var c = tagConn as ITagReader; if (c == null || c.Children == null) { break; } foreach (var item in c.Children) { if (item.Node == strs[i]) { tagConn = item; break; } } } } var r = tagConn as ITagReader; var key = strs[strs.Length - 1]; try { var action = r.SetTagReader(key, eval.Eval(v.Value)); if (action != null) { action(); ValueChangedEventHandler handle = (s1, e1) => { ctrl.InvokeAsynchronously(action); }; foreach (ITag tag in eval.TagList) { valueChangedList.Add(new TagNodeHandle(tag.ID, key, tagConn, handle)); tag.ValueChanged += handle; } } } catch (Exception e) { App.AddErrorLog(e); MessageBox.Show(string.Format("设备'{0}'属性'{1}'的值'{2}'转化出错!", string.IsNullOrEmpty(r.Node) ? r.GetType().ToString() : r.Node, key, v.Value)); } if (Attribute.IsDefined(tagConn.GetType(), typeof(StartableAttribute), false)) { FrameworkElement element = tagConn as FrameworkElement; element.Cursor = Cursors.UpArrow; element.AddHandler(UIElement.MouseEnterEvent, new MouseEventHandler(element_MouseEnter)); element.AddHandler(UIElement.MouseLeaveEvent, new MouseEventHandler(element_MouseLeave)); element.AddHandler(UIElement.MouseLeftButtonDownEvent, new MouseButtonEventHandler(element_MouseLeftButtonDown)); } var hmi = tagConn as HMIControlBase; if (hmi != null && hmi.ShowCaption && !string.IsNullOrEmpty(hmi.Caption)) { AdornerLayer lay = AdornerLayer.GetAdornerLayer(hmi); if (lay != null) { TextAdorner frame = new TextAdorner(hmi); frame.Text = hmi.Caption; lay.Add(frame); } } } } } var writer = taglink as ITagWriter; if (writer != null && !string.IsNullOrEmpty(writer.TagWriteText)) { var delgts = new List <Delegate>(); foreach (var item in writer.TagWriteText.GetListFromText()) { try { if (!string.IsNullOrEmpty(item.Value)) { delgts.Add(eval.WriteEval(item.Key, item.Value)); } else { delgts.Add(eval.WriteEval(item.Key)); } } catch (Exception e) { App.AddErrorLog(e); MessageBox.Show(string.Format("设备{0}变量{1}写入PLC公式转换失败", taglink.Node, item.Key) + "\n" + e.Message); } writer.SetTagWriter(delgts); } } }