📄 tabcontainer.cs
字号:
// be code generated.
[EditorBrowsable(EditorBrowsableState.Never)]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1706:ShortAcronymsShouldBeUppercase", MessageId = "Member", Justification = "Following ASP.NET naming conventions...")]
public bool ShouldSerializeUniqueID()
{
return IsRenderingScript && AutoPostBack;
}
#endregion
#region [ Methods ]
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
Page.RegisterRequiresControlState(this);
_initialized = true;
if (_cachedActiveTabIndex > -1)
{
ActiveTabIndex = _cachedActiveTabIndex;
}
else if (Tabs.Count > 0)
{
ActiveTabIndex = 0;
}
}
protected virtual void OnActiveTabChanged(EventArgs e)
{
EventHandler eh = Events[EventActiveTabChanged] as EventHandler;
if (eh != null)
{
eh(this, e);
}
}
protected override void AddParsedSubObject(object obj)
{
TabPanel objTabPanel = obj as TabPanel;
if (null != objTabPanel)
{
Controls.Add(objTabPanel);
}
else if (!(obj is LiteralControl))
{
throw new HttpException(string.Format(CultureInfo.CurrentCulture, "TabContainer cannot have children of type '{0}'.", obj.GetType()));
}
}
protected override void AddedControl(Control control, int index)
{
((TabPanel)control).SetOwner(this);
base.AddedControl(control, index);
}
protected override void RemovedControl(Control control)
{
TabPanel controlTabPanel = control as TabPanel;
if (control != null && controlTabPanel.Active && ActiveTabIndex < Tabs.Count)
{
EnsureActiveTab();
}
controlTabPanel.SetOwner(null);
base.RemovedControl(control);
}
protected override ControlCollection CreateControlCollection()
{
return new TabPanelCollection(this);
}
protected override Style CreateControlStyle()
{
TabContainerStyle style = new TabContainerStyle(ViewState);
style.CssClass = "ajax__tab_xp";
return style;
}
protected override void LoadClientState(string clientState)
{
Dictionary<string, object> state = (Dictionary<string, object>)new JavaScriptSerializer().DeserializeObject(clientState);
if (state != null)
{
ActiveTabIndex = (int)state["ActiveTabIndex"];
object[] tabState = (object[])state["TabState"];
for (int i = 0; i < tabState.Length; i++)
{
Tabs[i].Enabled = (bool)tabState[i];
}
}
}
protected override string SaveClientState()
{
Dictionary<string, object> state = new Dictionary<string, object>();
state["ActiveTabIndex"] = ActiveTabIndex;
List<object> tabState = new List<object>();
foreach (TabPanel panel in Tabs)
{
tabState.Add(panel.Enabled);
}
state["TabState"] = tabState;
return new JavaScriptSerializer().Serialize(state);
}
protected override void LoadControlState(object savedState)
{
Pair p = (Pair)savedState;
if (p != null)
{
base.LoadControlState(p.First);
ActiveTabIndex = (int)p.Second;
}
else
{
base.LoadControlState(null);
}
}
protected override object SaveControlState()
{
Pair p = new Pair();
p.First = base.SaveControlState();
p.Second = ActiveTabIndex;
if (p.First == null && p.Second == null)
{
return null;
}
else
{
return p;
}
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
Style.Remove(HtmlTextWriterStyle.Visibility);
if (!ControlStyleCreated)
{
writer.AddAttribute(HtmlTextWriterAttribute.Class, "ajax__tab_xp");
}
base.AddAttributesToRender(writer);
writer.AddStyleAttribute(HtmlTextWriterStyle.Visibility, "hidden");
}
protected override void RenderContents(HtmlTextWriter writer)
{
Page.VerifyRenderingInServerForm(this);
writer.AddAttribute(HtmlTextWriterAttribute.Id, ClientID + "_header");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
{
RenderHeader(writer);
}
writer.RenderEndTag();
if (!Height.IsEmpty)
writer.AddStyleAttribute(HtmlTextWriterStyle.Height, Height.ToString());
writer.AddAttribute(HtmlTextWriterAttribute.Id, ClientID + "_body");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
{
RenderChildren(writer);
}
writer.RenderEndTag();
}
protected virtual void RenderHeader(HtmlTextWriter writer)
{
foreach (TabPanel panel in Tabs)
{
if (panel.Visible)
{
panel.RenderHeader(writer);
}
}
}
protected override bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
int tabIndex = ActiveTabIndex;
bool result = base.LoadPostData(postDataKey, postCollection);
if (tabIndex != ActiveTabIndex)
{
return true;
}
return result;
}
protected override void RaisePostDataChangedEvent()
{
OnActiveTabChanged(EventArgs.Empty);
}
private void EnsureActiveTab()
{
if (_activeTabIndex < 0 || _activeTabIndex >= Tabs.Count)
{
_activeTabIndex = 0;
}
for (int i = 0; i < Tabs.Count; i++)
{
if (i == ActiveTabIndex)
{
Tabs[i].Active = true;
}
else
{
Tabs[i].Active = false;
}
}
}
#endregion
#region [ TabContainerStyle ]
private sealed class TabContainerStyle : Style
{
public TabContainerStyle(StateBag state)
: base(state)
{
}
protected override void FillStyleAttributes(CssStyleCollection attributes, IUrlResolutionService urlResolver)
{
base.FillStyleAttributes(attributes, urlResolver);
attributes.Remove(HtmlTextWriterStyle.Height);
attributes.Remove(HtmlTextWriterStyle.BackgroundColor);
attributes.Remove(HtmlTextWriterStyle.BackgroundImage);
}
}
#endregion
#region IPostBackEventHandler Members
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes", Justification="Called by ASP.NET infrastructure")]
void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
{
if (eventArgument.StartsWith("activeTabChanged", StringComparison.Ordinal))
{
// change the active tab.
//
int parseIndex = eventArgument.IndexOf(":", StringComparison.Ordinal);
Debug.Assert(parseIndex != -1, "Expected new active tab index!");
if (parseIndex != -1 && Int32.TryParse(eventArgument.Substring(parseIndex + 1), out parseIndex))
{
ActiveTabIndex = parseIndex;
OnActiveTabChanged(EventArgs.Empty);
}
}
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -