Custom ASP.NET Container Control

前端 未结 8 1905
醉话见心
醉话见心 2020-12-14 20:50

I\'ve been trying to create a custom control that works exactly like the Panel control except surrounded by a few divs and such to create a rounded box look. I haven\'t been

8条回答
  •  -上瘾入骨i
    2020-12-14 21:09

    I looked at this question because I wanted to produce a 2 column layout panel. (not quite but its a much simpler example of what I needed. I'm sharing the solution that I wound up using:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace Syn.Test
    {
        [DefaultProperty("Text")]
        [ToolboxData("<{0}:MultiPanel runat=server>")]
        [ParseChildren(true)]
        [PersistChildren(false)]
        public class MultiPanel : WebControl, INamingContainer
        {
            public ContentContainer LeftContent { get; set; }
    
            public ContentContainer RightContent { get; set; }
    
            protected override void CreateChildControls()
            {
                base.CreateChildControls();
            }
    
            protected override void Render(HtmlTextWriter output)
            {
                output.AddStyleAttribute("width", "600px");
                output.RenderBeginTag(HtmlTextWriterTag.Div);
    
                output.AddStyleAttribute("float", "left");
                output.AddStyleAttribute("width", "280px");
                output.AddStyleAttribute("padding", "10px");
                output.RenderBeginTag(HtmlTextWriterTag.Div);
                LeftContent.RenderControl(output);
                output.RenderEndTag();
    
                output.AddStyleAttribute("float", "left");
                output.AddStyleAttribute("width", "280px");
                output.AddStyleAttribute("padding", "10px");
                output.RenderBeginTag(HtmlTextWriterTag.Div);
                RightContent.RenderControl(output);
                output.RenderEndTag();
    
                output.RenderEndTag();
             }
        }
    
        [ParseChildren(false)]
        public class ContentContainer : Control, INamingContainer
        {
        }
    }
    

    The issue I still have is the intellisense does't work for in this scenario, it won't suggest the Left and Right Content tags.

提交回复
热议问题