/// <summary> /// 释放资源 /// </summary> public override void Dispose() { DesignPage.Dispose(); DesignPage.ControlPosition -= PageDesign_ControlPosition; DesignPage.ControlDelete -= DesignPage_ControlDelete; txtXaml.LostFocus -= txtXaml_LostFocus; txtXml.LostFocus -= txtXml_LostFocus; this._IDesignFramework = null; }
/// <summary> /// 在切换tableControl控件的时候,更新属性以及控件树 /// </summary> internal void UpdatePropertyGridAndControlTree() { UpdateControlTree(); DesignPage.UpdatePropertyGrid(); }
void Xaml_LostFocus(string orgValue, string changeXaml) { if (changeXaml.IsNullOrEmpty() || changeXaml.Equals(orgValue)) { return; } //-->判断控件是否可用。 FrameworkElement fe = Wrapper.LoadXaml <FrameworkElement>(changeXaml); if (null == fe) { _XamlTemplate = new XamlTemplate(); this.Xaml_Template = _XamlTemplate.ParseXml().ToString(); return; } XamlTemplate new_xamlTemplate = XamlTemplate.DecodeXml(changeXaml); //-->判断程序集是否有改变 this._XamlTemplate.AssemblyCollection.AddRange(new_xamlTemplate.AssemblyCollection); XamlCanvasTemplate old_Xaml_CanvasTemplate = this._XamlTemplate.CanvasTemplate; //-->判断画布的大小,背景色是否不同 foreach (var cp in new_xamlTemplate.CanvasTemplate.CanvasPropertyDict) { if (old_Xaml_CanvasTemplate.CanvasPropertyDict.ContainsKey(cp.Key)) { if (!old_Xaml_CanvasTemplate.CanvasPropertyDict[cp.Key].Equals(cp.Value)) { //-->内容有改变 old_Xaml_CanvasTemplate.CanvasPropertyDict[cp.Key] = cp.Value; } } else { old_Xaml_CanvasTemplate.CanvasPropertyDict.Add(cp.Key, cp.Value); } } //-->判断控件 foreach (var child in new_xamlTemplate.CanvasTemplate.Children) { FrameworkElement _news_ctrl = fe.FindName(child.Key) as FrameworkElement; ((fe as UserControl).Content as Panel).Children.Remove(_news_ctrl); if (old_Xaml_CanvasTemplate.Children.ContainsKey(child.Key)) { if (!old_Xaml_CanvasTemplate.Children[child.Key].Equals(child.Value)) { //-->删除原来的控件 this.DesignPage.DeleteChilren(child.Key); //-->2、增加新的控件 this.DesignPage.AddChild(_news_ctrl, !_IsOpenPage); DesignPage.UpdateDesignRectangle(_news_ctrl); old_Xaml_CanvasTemplate.Children[child.Key] = child.Value; } continue; } this.DesignPage.AddChild(_news_ctrl, !_IsOpenPage); old_Xaml_CanvasTemplate.Children.Add(child.Key, child.Value); //-->初始一下内容 if (_news_ctrl is ICompositeCtrl) { var ci = _IDesignFramework.GetControlInfoByControlName(_news_ctrl.Name); if (null == ci) { continue; } //-->查找 metadata 里 row里的信息 var ctrlMetaData = _IDesignFramework.GetMetaDataInfoByTableName(ci.MetaData); if (null == ctrlMetaData || null == ctrlMetaData.Item || 0 == ctrlMetaData.Item.Count) { continue; } //--> metaData Column var colXml = ctrlMetaData.Item.Where(p => p.column_name.Equals(ci.ColumnName)).GetFirst <MetaDataColumnInfo>(); if (null == colXml) { continue; } var _newCtrlMetaData = new MetaDataInfo(); _newCtrlMetaData.table_type = ctrlMetaData.table_type; _newCtrlMetaData.table_name = ctrlMetaData.table_name; _newCtrlMetaData.table_comment = ctrlMetaData.table_comment; _newCtrlMetaData.Item = new List <MetaDataColumnInfo>(); _newCtrlMetaData.Item.Add(colXml); CtrlPlatformCommandInfo ctrlCmd = new CtrlPlatformCommandInfo(); ctrlCmd.ControlInfo = ci; ctrlCmd.MetaDataInfo = _newCtrlMetaData; (_news_ctrl as ICompositeCtrl).InitTitle(ctrlCmd); } } //-->如果是高、宽改变了,得修改xml文件信息 this._XmlTemplate.BaseInfo.PageHeight = new_xamlTemplate.Height; this._XmlTemplate.BaseInfo.PageWidth = new_xamlTemplate.Width; _XamlTemplate.Height = new_xamlTemplate.Height; _XamlTemplate.Width = new_xamlTemplate.Width; Xml_Template = _XmlTemplate.ParseXml().ToString(); _XamlTemplate = new_xamlTemplate; this.Xaml_Template = changeXaml; DesignPage.UpdatePropertyGrid(); }