/// <summary> /// 给控件注册事件 /// </summary> void RegisterControl() { if (null == _XmlTemplate || null == _XmlTemplate.EventBindItem) { return; } var ebis = _XmlTemplate.EventBindItem; foreach (var ebi in ebis) { //-->找出控件 var control = FindControl(ebi.ControlName); var cc = ParseControlConfig.GetControlConfig(control.GetType().Name); foreach (var cebi in ebi.Item) { var _be = cc.Events.Where(p => p.Name.Equals(cebi.EventName)).GetFirst <BindEvent>(); if (null == _be) { continue; } Wrapper.ControlRegisterEvent(control, _be.Name, _be.AssemblyName, _be.BindFunctionName); control.Tag = this; } } }
/// <summary> /// 判断当前事件名称【EventName】它是来到于哪里,是Form还是自己所在控件里, /// 如果来到是Form里的话,此时的_ControlName就是用Wrapper.ParseControlName()得到, /// 否则的话,就不分析Control控件了 /// </summary> /// <param name="ctrl"></param> /// <param name="eventName"></param> /// <returns></returns> internal static string GetControlName(FrameworkElement ctrl, string eventName) { var cc = ParseControlConfig.GetControlConfig(ctrl.GetType().Name); if (null == cc || null == cc.Functions || 0 == cc.Functions.Count) { return(Wrapper.ParseControlName(ctrl.Name));; } var fi = cc.Functions.Where(p => p.Name.Equals(eventName)).GetFirst <FunctionInfo>(); if (null == fi) { return(Wrapper.ParseControlName(ctrl.Name)); } return(ctrl.Name); }
/// <summary> /// 增加控件绑定事件 /// </summary> void AddCtrlBindEvent(XmlTemplate xml) { var _cc = ParseControlConfig.GetControlConfig(CurrentSelectedSetEventControl.GetType().Name); var _be = _cc.Events.Where(p => p.Name.Equals(this.EventName)).GetFirst <BindEvent>(); EventBindInfo _ebi = new EventBindInfo(); _ebi.ControlName = this.EventControlName; _ebi.Item = new List <CtrlBindEventInfo>(); CtrlBindEventInfo _cbei = new CtrlBindEventInfo(); _cbei.EventName = this.EventName; _cbei.AssemblyName = _be.AssemblyName; _cbei.BindFunctionName = _be.BindFunctionName; _ebi.Item.Add(_cbei); xml.EventBindItem.Add(_ebi); IDesignFramework.UpdateCurrentTemplate(); }
/// <summary> /// /// </summary> /// <param name="ui"></param> /// <returns></returns> public static List <PropertyInfoAttribute> CommonPropertyItem(UIElement ui) { List <PropertyInfoAttribute> item = new List <PropertyInfoAttribute>(); Type tt = ui.GetType(); ControlConfig cc = ParseControlConfig.GetControlConfig(tt.Name); if (null == cc) { return(item); } FrameworkElement fe = ui as FrameworkElement; foreach (var v in cc.DictProperty) { //string[] a = v.Split(';'); PropertyInfoAttribute pia = GetPropertyInfoAttribute(ui, tt, v.Key, v.Value); item.Add(pia); } return(item); }
/// <summary> /// 创建控件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="controlType"></param> /// <returns></returns> public static T CreateCtrl <T>(string controlType) where T : FrameworkElement { List <String> assItem = new List <string>(); assItem.AddRange(ParseControlTemplate.GetControlTempletConfig("UserControl").AssemblyCollection); ControlConfig config = ParseControlConfig.GetControlConfig(controlType); //-->判断是不是复合控件 if (config.IsCompositeCtrl && !config.AssemblyQualifiedName.IsNullOrEmpty()) { assItem.Add(config.AssemblyQualifiedName.Trim()); } string ass = string.Join(" ", assItem); ass = string.Format(config.xaml, ass); ass = ass.Replace("??", config.Name + DateTime.Now.ToString("ffffff")); ass = ass.Trim(); T tt = LoadXaml <T>(ass); tt.Tag = config; return(tt); }
/// <summary> /// /// </summary> /// <param name="ui"></param> /// <returns></returns> public static List <EventInfoAttribute> CommonEventItem(UIElement ui) { var result = new List <EventInfoAttribute>(); if (null == ui) { return(result); } Type tt = ui.GetType(); ControlConfig cc = ParseControlConfig.GetControlConfig(tt.Name); if (null == cc || null == cc.Events) { return(result); } foreach (var e in cc.Events) { EventInfoAttribute ea = new EventInfoAttribute(e.Name, e.AssemblyName, e.Description, e.EventDesigner); ea.Source = ui; result.Add(ea); } return(result); }
/// <summary> /// 方法 /// </summary> /// <param name="ui"></param> internal void ReadFunctions(UIElement ui) { spPValue.Children.Clear(); DisposePValue(); _ReadUIElement = ui; if (null == ui) { return; } var cc = ParseControlConfig.GetControlConfig(ui.GetType().Name); if (null == cc) { return; } //-->如果是Form里的子控件话吧,还得把Form里的函数取出来。 string controlName = string.Format("{0}", this._ReadUIElement.GetValue(Canvas.NameProperty)); var _xml = IDesignFramework.GetCurrentXmlTemplate(); AddFunctionToStackPanel(controlName, cc.Functions, _xml); string _newControlName = Wrapper.ParseControlName(controlName); if (_newControlName.Equals(controlName)) { return; } //-->说明此控件是Form控件里的一个子项 var _formCC = ParseControlConfig.GetControlConfig(ConstantCollection.FORM_PREFIX); if (null == _formCC || null == _formCC.Functions || 0 == _formCC.Functions.Count) { return; } AddFunctionToStackPanel(_newControlName, _formCC.Functions, _xml); }
/// <summary> /// 获取控件名称 /// </summary> /// <returns></returns> string _GetControlName() { /************************************************************************ * 判断当前事件名称【EventName】它是来到于哪里,是Form还是自己所在控件里 * * 如果来到是Form里的话,此时的_ControlName就是用Wrapper.ParseControlName()得到 * * 否而的话,就不分析Control控件了 * ************************************************************************/ var cc = ParseControlConfig.GetControlConfig(CurrentSelectedSetEventControl.GetType().Name); if (null == cc || null == cc.Functions || 0 == cc.Functions.Count) { return(Wrapper.ParseControlName(EventControlName));; } var fi = cc.Functions.Where(p => p.Name.Equals(EventName)).GetFirst <FunctionInfo>(); if (null == fi) { return(Wrapper.ParseControlName(EventControlName)); } return(EventControlName); }