小編給大家分享一下ASP.NET控件設(shè)計(jì)時(shí)操作列表與模板編輯的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)建站"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營銷,產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動(dòng)網(wǎng)絡(luò)一網(wǎng)打盡,滿足企業(yè)的營銷需求!創(chuàng)新互聯(lián)建站具備承接各種類型的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)項(xiàng)目的能力。經(jīng)過10多年的努力的開拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶的一致好評(píng)。
ASP.NET控件設(shè)計(jì)時(shí)操作列表與模板編輯一.智能標(biāo)記
先看一張圖.
GridView右側(cè)的小三角可以很輕松的幫助我們?cè)O(shè)置常用的屬性,如下面的啟動(dòng)分頁,啟用排序等,通過這樣的方式我們可以很快的完成工作。我們稱這樣的任務(wù)菜單為智能標(biāo)記.
下面來看看ASP.NET控件設(shè)計(jì)時(shí)操作列表與模板編輯如何實(shí)現(xiàn)
1.重寫ControlDesigner的ActionLists屬性
你必須重寫這個(gè)屬性,返回你自定義的智能標(biāo)記集合(即DesignerActionListCollection),這里假設(shè)CustomControlActionList為自定義的智能
public class SampleControlDesigner : ControlDesigner { public SampleControlDesigner() : base() { } //創(chuàng)建一個(gè)自定義操作列表集合 public override DesignerActionListCollection ActionLists { get { DesignerActionListCollection actionLists = new DesignerActionListCollection(); actionLists.Add(new CustomControlActionList(this)); return actionLists; } } }
2.CustomControlActionList 自定義項(xiàng)列表
2.1項(xiàng)列表分類
(1)標(biāo)題面板
(2)屬性面板
(3)方法面板
類圖如下
看個(gè)效果圖,你就明白怎么回事了
2.2實(shí)現(xiàn)
(1)繼承DesignerActionList類,重寫GetSortedActionItems方法添加自定義項(xiàng)面板集合,即2.1的三種項(xiàng)面板
public override DesignerActionItemCollection GetSortedActionItems() { if (items == null) { items = new DesignerActionItemCollection(); // 添加標(biāo)題面板 items.Add(new DesignerActionHeaderItem("快速設(shè)置面板測(cè)試:")); //添加屬性相關(guān)面板 items.Add(new DesignerActionPropertyItem("Visible", "是否顯示")); items.Add(new DesignerActionPropertyItem("Width", "設(shè)置寬度")); items.Add(new DesignerActionPropertyItem("Height", "設(shè)置高度")); // 添加方法相關(guān)面板 items.Add(new DesignerActionMethodItem(this, "FormatBlue", "定義背景為藍(lán)色", true)); items.Add(new DesignerActionMethodItem(this, "FormatRed", "定義背景為紅色", true)); items.Add(new DesignerActionMethodItem(this, "FormatWhite", "定義背景為白色", true)); } return items; }
(2)屬性,方法項(xiàng)面板的實(shí)現(xiàn)
如果你設(shè)置屬性的話,則必須在CustomControlActionList定義屬性,方法也相同,代碼如下
#region 自定義方法 public void FormatBlue() { SampleControl ctrl = (SampleControl)_parent.Component; TransactedChangeCallback toCall = new TransactedChangeCallback(DoFormat); ControlDesigner.InvokeTransactedChange(ctrl, toCall, "FormatBlue", "FormatBlue"); } public void FormatRed() { SampleControl ctrl = (SampleControl)_parent.Component; TransactedChangeCallback toCall = new TransactedChangeCallback(DoFormat); ControlDesigner.InvokeTransactedChange(ctrl, toCall, "FormatRed", "FormatRed"); } public void FormatWhite() { SampleControl ctrl = (SampleControl)_parent.Component; //定義委托 TransactedChangeCallback toCall = new TransactedChangeCallback(DoFormat); ControlDesigner.InvokeTransactedChange(ctrl, toCall, "FormatWhite", "FormatWhite"); } #endregion
#region 自定義屬性 public bool Visible { get { SampleControl ctrl = (SampleControl)_parent.Component; return ctrl.Visible; } set { PropertyDescriptor propDesc = TypeDescriptor.GetProperties(_parent.Component)["Visible"]; propDesc.SetValue(_parent.Component, value); } } public Unit Width { get { SampleControl ctrl = (SampleControl)_parent.Component; return ctrl.Width; } set { PropertyDescriptor propDesc = TypeDescriptor.GetProperties(_parent.Component)["Width"]; propDesc.SetValue(_parent.Component, value); } } public Unit Height { get { SampleControl ctrl = (SampleControl)_parent.Component; return ctrl.Height; } set { PropertyDescriptor propDesc = TypeDescriptor.GetProperties(_parent.Component)["Height"]; propDesc.SetValue(_parent.Component, value); } } #endregion public bool DoFormat(object arg) { SampleControl ctl = (SampleControl)_parent.Component; string fmt = (string)arg; PropertyDescriptor backColorProp = TypeDescriptor.GetProperties(ctl)["BackColor"]; switch (fmt) { case "FormatBlue": backColorProp.SetValue(ctl, Color.Blue); break; case "FormatRed": backColorProp.SetValue(ctl, Color.Red); break; case "FormatWhite": backColorProp.SetValue(ctl, Color.White); break; } //刷新設(shè)計(jì)時(shí)html標(biāo)記 _parent.UpdateDesignTimeHtml(); return true; }
以上步驟完成以后就大功告成了,接著則與相關(guān)控件關(guān)聯(lián)起來就可以了,效果圖在上面已經(jīng)看過了.
[DesignerAttribute(typeof(SampleControlDesigner))]
ASP.NET控件設(shè)計(jì)時(shí)操作列表與模板編輯二.模板編輯器
上面的模板編輯界面相信大家都很熟悉吧.設(shè)置支持怎么少的了模板呢.設(shè)置時(shí)模板編輯實(shí)現(xiàn)比較簡單,下面來看下如何實(shí)現(xiàn)
這里自定義的模板控件不再列出
1.重寫ControlDesigner類的TemplateGroups返回自定義模板組集合即(TemplateGroupCollection)
添加步驟跟表格的添加類似,td add tr然后table add td
模板則是TemplateGroup add TemplateDefinition 然后TemplateGroupCollection add TemplateGroup
代碼如下
public override TemplateGroupCollection TemplateGroups { get { if (col == null) { col = base.TemplateGroups; TemplateGroup tempGroup; TemplateDefinition tempDef; TemplateGroupsSample ctl; ctl = (TemplateGroupsSample)Component; // 創(chuàng)建模板分組一 tempGroup = new TemplateGroup("模板A組"); //提供在設(shè)置時(shí)編輯模板 tempDef = new TemplateDefinition(this, "Template A1", ctl, "Template1", false); tempGroup.AddTemplateDefinition(tempDef); tempDef = new TemplateDefinition(this, "Template A2", ctl, "Template2", false); tempGroup.AddTemplateDefinition(tempDef); col.Add(tempGroup); // 創(chuàng)建模板分組二 tempGroup = new TemplateGroup("模板B組"); tempDef = new TemplateDefinition(this, "Template B1", ctl, "Template3", true); tempGroup.AddTemplateDefinition(tempDef); tempDef = new TemplateDefinition(this, "Template B2", ctl, "Template4", true); tempGroup.AddTemplateDefinition(tempDef); col.Add(tempGroup); } return col; } }
這里注意TemplateDefinition構(gòu)造函數(shù)的***一個(gè)屬性,true則在設(shè)計(jì)時(shí)編輯只能添加服務(wù)器控件
2.初始化啟用設(shè)計(jì)時(shí)模板編輯
我們還需要在Initialize方法中調(diào)用SetViewFlags方法啟用設(shè)計(jì)時(shí)模板編輯
public override void Initialize(IComponent component) { base.Initialize(component); SetViewFlags(ViewFlags.TemplateEditing, true); }
3.提供默認(rèn)矩形標(biāo)識(shí)符,為控件提供說明
如下圖,DataList默認(rèn)情況下給予如下提示
我們可以通過重寫GetDesignTimeHtml方法調(diào)用CreatePlaceHolderDesignTimeHtml方法創(chuàng)建一個(gè)矩形標(biāo)識(shí)符來實(shí)現(xiàn)
public override string GetDesignTimeHtml() { return CreatePlaceHolderDesignTimeHtml("右擊或選擇編輯模板面板來編輯模板內(nèi)容"); }
好了,完成了,接著要做的就是與相關(guān)模板控件關(guān)聯(lián)起來了
平時(shí)大家都太忙了,上面功能有跟沒有沒多大關(guān)系,不過常用控件屬性和功能,有設(shè)計(jì)時(shí)支持一定會(huì)讓使用的更加有效.
以上是“ASP.NET控件設(shè)計(jì)時(shí)操作列表與模板編輯的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!