⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 expanderpanel.cs

📁 这是一个简单的论坛程序源码
💻 CS
字号:
using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

namespace NetFocus.Web.Applications.Forum 
{
    /// <summary>
    /// 实现折叠/展开 功能
    /// </summary>
    public class ExpanderPanel : WebControl, INamingContainer
    {
        WebContext sbContext = WebContext.Current;

        protected override HtmlTextWriterTag TagKey
        {
            get { return HtmlTextWriterTag.Div; }
        }

        #region CompositeControl Pattern

        public override ControlCollection Controls
        {
            get
            {
                this.EnsureChildControls();
                return base.Controls;
            }
        }

        #endregion

        #region Properties

        #region Button

        /// <summary>
        /// 展开状态的按钮样式
        /// </summary>
        [
        System.ComponentModel.DefaultValue("expanderPanelButtonOpened"),
        ]
        public virtual String ButtonOpenedCssClass
        {
            get
            {
                Object state = ViewState["ButtonOpenedCssClass"];
                if (state != null)
                    return (String)state;

                return "expanderPanelButtonOpened";
            }
            set { ViewState["ButtonOpenedCssClass"] = value; }
        }


        /// <summary>
        /// 折叠状态的按钮样式
        /// </summary>
        [
        System.ComponentModel.DefaultValue("expanderPanelButtonClosed"),
        ]
        public virtual String ButtonClosedCssClass
        {
            get
            {
                Object state = ViewState["ButtonClosedCssClass"];
                if (state != null)
                    return (String)state;

                return "expanderPanelButtonClosed";
            }
            set { ViewState["ButtonClosedCssClass"] = value; }
        }

        #endregion

        #region HeaderLabel or HeaderLink

        /// <summary>
        /// 折叠控件的标题
        /// Gets or sets the text shown next to the toggle button
        /// </summary>
        [System.ComponentModel.DefaultValue("标题")]
        public virtual String Text
        {
            get
            {
                if (ResourceName != null)
                    return Resources.GetString(ResourceName);

                Object state = ViewState["Text"];
                if (state != null)
                    return (String)state;

                return "标题";
            }
            set { ViewState["Text"] = value; }
        }

        public virtual String ResourceName
        {
            get { return ViewState["ResourceName"] as string; }
            set { ViewState["ResourceName"] = value; }
        }

        /// <summary>
        /// 导航链接
        /// </summary>
        public virtual String NavigateUrl
        {
            get { return ViewState["NavigateUrl"] as string; }
            set { ViewState["NavigateUrl"] = value; }
        }


        /// <summary>
        /// 文本样式
        /// Gets or sets the css class of the text next to the toggle button
        /// </summary>
        [System.ComponentModel.DefaultValue("")]
        public virtual String TextCssClass
        {
            get
            {
                Object state = ViewState["TextCssClass"];
                if (state != null)
                    return (String)state;

                return "";
            }
            set { ViewState["TextCssClass"] = value; }
        }

        #endregion

        /// <summary>
        /// 需要折叠的模块ID
        /// Gets or sets the ID of the control which is the target of the visibility-toggling behavior.
        /// </summary>
        [
        Description("Gets or sets the ID of the control which is the target of the visibility-toggling behavior."),
        Category("Behavior"),
        DefaultValue(""),
        ]
        public virtual String ControlToToggle
        {
            get
            {
                object savedState = this.ViewState["ControlToToggle"];
                if (savedState != null)
                    return (String)savedState;

                return "";
            }
            set
            {
                this.ViewState["ControlToToggle"] = value;
                this.cachedTargetControl = null;
            }
        }


        /// <summary>
        /// 折叠状态
        /// Gets or sets whether the target control is visible or not
        /// </summary>
        [
        System.ComponentModel.DefaultValue(false),
        ]
        public virtual Boolean Collapsed
        {
            get
            {
                Object state = ViewState["Collapsed"];
                if (state != null)
                    return (Boolean)state;

                return false;
            }
            set { ViewState["Collapsed"] = value; }
        }


        /// <summary>
        /// Gets or sets the order of the button and text
        /// </summary>
        [
        System.ComponentModel.DefaultValue(System.Web.UI.WebControls.TextAlign.Left),
        ]
        public virtual System.Web.UI.WebControls.TextAlign TextAlign
        {
            get
            {
                Object state = ViewState["TextAlign"];
                if (state != null)
                    return (System.Web.UI.WebControls.TextAlign)state;

                return System.Web.UI.WebControls.TextAlign.Left;
            }
            set { ViewState["TextAlign"] = value; }
        }


        #endregion

        #region Lifecycle

        /// <exclude />
        protected override void CreateChildControls()
        {
            Controls.Clear();

            tracker = new HtmlInputHidden();
            tracker.Name = "tracker";
            tracker.ID = "tracker";
            Controls.Add(tracker);

            button = new HyperLink();
            button.ID = "clicker";
            this.Controls.Add(button);


            if (string.IsNullOrEmpty(this.NavigateUrl))
            {
                headerLabel = new Label();
                headerLabel.ID = "label";
                headerLabel.Attributes["style"] = "cursor: pointer;";
                this.Controls.Add(headerLabel);
            }
            else
            {
                headerLink = new HyperLink();
                headerLink.ID = "headerLink";
                this.Controls.Add(headerLink);
            }
        }

        /// <exclude />
        protected override void OnPreRender(EventArgs e)
        {
            this.EnsureChildControls();
            base.OnPreRender(e);

            //if (sbContext.User == null || !sbContext.User.EnableCollapsingPanels)
                Collapsed = false;

            if (!Page.ClientScript.IsClientScriptIncludeRegistered(scriptKey))
            {
                Page.ClientScript.RegisterClientScriptInclude(scriptKey, Page.ResolveUrl("~/Utility/tunynet_web_ui/ExpanderPanelScript.js"));
            }

            this.tracker.Value = this.Collapsed.ToString();

            if (this.Collapsed)
                this.targetStyle["display"] = "none";
            else
            {
                if (this.targetStyle["display"] != null)
                    this.targetStyle.Remove("display");
            }
        }

        /// <exclude />
        protected override void Render(HtmlTextWriter writer)
        {
            if (this.Page != null)
                this.Page.VerifyRenderingInServerForm(this);

            ApplyPropertiesToChildren();

            base.Render(writer);
        }

        private void ApplyPropertiesToChildren()
        {
            this.EnsureChildControls();

            this.button.Attributes["onclick"] =
                String.Format(
                    "return ExpanderPanel_Toggle('{0}','{1}','{2}','{3}','{4}');",
                    this.targetControl.ClientID,
                    this.button.ClientID,
                    this.tracker.ClientID,
                    this.ButtonOpenedCssClass,
                    this.ButtonClosedCssClass
                );

            if (string.IsNullOrEmpty(this.NavigateUrl))
            {
                this.headerLabel.Text = this.Text;
                this.headerLabel.Attributes["onclick"] =
                    String.Format(
                        "return ExpanderPanel_Toggle('{0}','{1}','{2}','{3}','{4}');",
                        this.targetControl.ClientID,
                        this.button.ClientID,
                        this.tracker.ClientID,
                        this.ButtonOpenedCssClass,
                        this.ButtonClosedCssClass
                    );
                this.headerLabel.CssClass = this.TextCssClass;
            }
            else
            {
                headerLink.Text = this.Text;
                headerLink.NavigateUrl = this.NavigateUrl;
                headerLink.CssClass = this.TextCssClass;
            }

            if (this.Collapsed)
                this.button.CssClass = this.ButtonOpenedCssClass;
            else
                this.button.CssClass = this.ButtonClosedCssClass;
        }

        #endregion

        #region Event Handlers


        #endregion

        #region Target Control

        private Control targetControl
        {
            get
            {
                if (cachedTargetControl == null)
                    this.cachedTargetControl = this.NamingContainer.FindControl(this.ControlToToggle);

                return this.cachedTargetControl;
            }
        }
        private Control cachedTargetControl = null;

        private System.Web.UI.CssStyleCollection targetStyle
        {
            get
            {
                WebControl targetWebControl = this.targetControl as WebControl;
                if (targetWebControl != null)
                    return targetWebControl.Style;

                System.Web.UI.HtmlControls.HtmlControl targetHtmlControl = this.targetControl as System.Web.UI.HtmlControls.HtmlControl;
                if (targetHtmlControl != null)
                    return targetHtmlControl.Style;

                return null;
            }
        }

        #endregion

        private static readonly String scriptKey = "SpaceBuilder.Controls.Utils.ExpanderPanel";
        private HtmlInputHidden tracker;
        private Label headerLabel;
        private HyperLink headerLink;
        private HyperLink button;

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -