Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / UI / WebControls / MenuItemStyle.cs / 2 / MenuItemStyle.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.UI.WebControls {
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.Text;
using System.Web.UI;
using System.Security.Permissions;
///
/// Specifies the style of a MenuItem.
///
[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)]
public sealed class MenuItemStyle : Style {
private const int PROP_VPADDING = 0x00010000;
private const int PROP_HPADDING = 0x00020000;
private const int PROP_ITEMSPACING = 0x00040000;
private HyperLinkStyle _hyperLinkStyle;
public MenuItemStyle() : base() {
}
public MenuItemStyle(StateBag bag) : base(bag) {
}
///
/// Gets and sets the horizontal padding around the node text
///
[
DefaultValue(typeof(Unit), ""),
WebCategory("Layout"),
NotifyParentProperty(true),
WebSysDescription(SR.MenuItemStyle_HorizontalPadding)
]
public Unit HorizontalPadding {
get {
if (IsSet(PROP_HPADDING)) {
return (Unit)(ViewState["HorizontalPadding"]);
}
return Unit.Empty;
}
set {
if ((value.Type == UnitType.Percentage) || (value.Value < 0)) {
throw new ArgumentOutOfRangeException("value");
}
ViewState["HorizontalPadding"] = value;
SetBit(PROP_HPADDING);
}
}
internal HyperLinkStyle HyperLinkStyle {
get {
if (_hyperLinkStyle == null) {
_hyperLinkStyle = new HyperLinkStyle(this);
}
return _hyperLinkStyle;
}
}
///
/// Gets and sets the vertical spacing between nodes
///
[
DefaultValue(typeof(Unit), ""),
WebCategory("Layout"),
NotifyParentProperty(true),
WebSysDescription(SR.MenuItemStyle_ItemSpacing)
]
public Unit ItemSpacing {
get {
if (IsSet(PROP_ITEMSPACING)) {
return (Unit)(ViewState["ItemSpacing"]);
}
return Unit.Empty;
}
set {
if ((value.Type == UnitType.Percentage) || (value.Value < 0)) {
throw new ArgumentOutOfRangeException("value");
}
ViewState["ItemSpacing"] = value;
SetBit(PROP_ITEMSPACING);
}
}
///
/// Gets and sets the vertical padding around the node text
///
[
DefaultValue(typeof(Unit), ""),
WebCategory("Layout"),
NotifyParentProperty(true),
WebSysDescription(SR.MenuItemStyle_VerticalPadding)
]
public Unit VerticalPadding {
get {
if (IsSet(PROP_VPADDING)) {
return (Unit)(ViewState["VerticalPadding"]);
}
return Unit.Empty;
}
set {
if ((value.Type == UnitType.Percentage) || (value.Value < 0)) {
throw new ArgumentOutOfRangeException("value");
}
ViewState["VerticalPadding"] = value;
SetBit(PROP_VPADDING);
}
}
///
/// Copies non-blank elements from the specified style, overwriting existing
/// style elements if necessary.
///
public override void CopyFrom(Style s) {
if (s != null) {
base.CopyFrom(s);
MenuItemStyle mis = s as MenuItemStyle;
if (mis != null && !mis.IsEmpty) {
// Only copy the Css attributes if they aren't included in the source Style's registered CSS class
if (s.RegisteredCssClass.Length != 0) {
if (mis.IsSet(PROP_VPADDING)) {
ViewState.Remove("VerticalPadding");
ClearBit(PROP_VPADDING);
}
if (mis.IsSet(PROP_HPADDING)) {
ViewState.Remove("HorizontalPadding");
ClearBit(PROP_HPADDING);
}
}
else {
if (mis.IsSet(PROP_VPADDING)) {
this.VerticalPadding = mis.VerticalPadding;
}
if (mis.IsSet(PROP_HPADDING)) {
this.HorizontalPadding = mis.HorizontalPadding;
}
}
// Item spacing is not rendered in the registered css, so we always copy it
if (mis.IsSet(PROP_ITEMSPACING)) {
this.ItemSpacing = mis.ItemSpacing;
}
}
}
}
protected override void FillStyleAttributes(CssStyleCollection attributes, IUrlResolutionService urlResolver) {
// The main style will be rendered on the container element, that does not contain the text.
// The Hyperlink style will render the text styles
// Copying the code from the base class, except for the part that deals with Font and ForeColor.
StateBag viewState = ViewState;
Color c;
// BackColor
if (IsSet(PROP_BACKCOLOR)) {
c = (Color)viewState["BackColor"];
if (!c.IsEmpty) {
attributes.Add(HtmlTextWriterStyle.BackgroundColor, ColorTranslator.ToHtml(c));
}
}
// BorderColor
if (IsSet(PROP_BORDERCOLOR)) {
c = (Color)viewState["BorderColor"];
if (!c.IsEmpty) {
attributes.Add(HtmlTextWriterStyle.BorderColor, ColorTranslator.ToHtml(c));
}
}
BorderStyle bs = this.BorderStyle;
Unit bu = this.BorderWidth;
if (!bu.IsEmpty) {
attributes.Add(HtmlTextWriterStyle.BorderWidth, bu.ToString(CultureInfo.InvariantCulture));
if (bs == BorderStyle.NotSet) {
if (bu.Value != 0.0) {
attributes.Add(HtmlTextWriterStyle.BorderStyle, "solid");
}
}
else {
attributes.Add(HtmlTextWriterStyle.BorderStyle, borderStyles[(int)bs]);
}
}
else {
if (bs != BorderStyle.NotSet) {
attributes.Add(HtmlTextWriterStyle.BorderStyle, borderStyles[(int)bs]);
}
}
Unit u;
// Height
if (IsSet(PROP_HEIGHT)) {
u = (Unit)viewState["Height"];
if (!u.IsEmpty) {
attributes.Add(HtmlTextWriterStyle.Height, u.ToString(CultureInfo.InvariantCulture));
}
}
// Width
if (IsSet(PROP_WIDTH)) {
u = (Unit)viewState["Width"];
if (!u.IsEmpty) {
attributes.Add(HtmlTextWriterStyle.Width, u.ToString(CultureInfo.InvariantCulture));
}
}
if (!HorizontalPadding.IsEmpty || !VerticalPadding.IsEmpty) {
// DevDiv Bugs 84107: Must pass InvariantCulture to Unit.ToString since Unit is not IFormattable.
Unit verticalPadding = VerticalPadding.IsEmpty ? Unit.Pixel(0) : VerticalPadding;
Unit horizontalPadding = HorizontalPadding.IsEmpty ? Unit.Pixel(0) : HorizontalPadding;
attributes.Add(HtmlTextWriterStyle.Padding, string.Format(CultureInfo.InvariantCulture,
"{0} {1} {0} {1}",
verticalPadding.ToString(CultureInfo.InvariantCulture),
horizontalPadding.ToString(CultureInfo.InvariantCulture)));
}
}
public override void MergeWith(Style s) {
if (s != null) {
if (IsEmpty) {
// Merging with an empty style is equivalent to copying,
// which is more efficient.
CopyFrom(s);
return;
}
base.MergeWith(s);
MenuItemStyle mis = s as MenuItemStyle;
if (mis != null && !mis.IsEmpty) {
// Since we're already copying the registered CSS class in base.MergeWith, we don't
// need to any attributes that would be included in that class.
if (s.RegisteredCssClass.Length == 0) {
if (mis.IsSet(PROP_VPADDING) && !this.IsSet(PROP_VPADDING)) {
this.VerticalPadding = mis.VerticalPadding;
}
if (mis.IsSet(PROP_HPADDING) && !this.IsSet(PROP_HPADDING)) {
this.HorizontalPadding = mis.HorizontalPadding;
}
}
if (mis.IsSet(PROP_ITEMSPACING) && !this.IsSet(PROP_ITEMSPACING)) {
this.ItemSpacing = mis.ItemSpacing;
}
}
}
}
///
/// Clears out any defined style elements from the state bag.
///
public override void Reset() {
if (IsSet(PROP_VPADDING))
ViewState.Remove("VerticalPadding");
if (IsSet(PROP_HPADDING))
ViewState.Remove("HorizontalPadding");
if (IsSet(PROP_ITEMSPACING))
ViewState.Remove("ItemSpacing");
ResetCachedStyles();
base.Reset();
}
internal void ResetCachedStyles() {
_hyperLinkStyle = null;
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- UdpTransportSettings.cs
- StylusPointProperty.cs
- InstallerTypeAttribute.cs
- TextParagraphProperties.cs
- MonthChangedEventArgs.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- SponsorHelper.cs
- RectangleF.cs
- Message.cs
- RuleProcessor.cs
- Maps.cs
- SqlProcedureAttribute.cs
- DrawingBrush.cs
- DockPanel.cs
- FloatUtil.cs
- BinaryFormatterWriter.cs
- DocumentReferenceCollection.cs
- CodePageUtils.cs
- BamlTreeMap.cs
- EmbeddedMailObjectsCollection.cs
- SafeRightsManagementPubHandle.cs
- UnsafeNativeMethods.cs
- ReflectionHelper.cs
- ParameterReplacerVisitor.cs
- OleDbMetaDataFactory.cs
- PageMediaType.cs
- DataGridViewCellMouseEventArgs.cs
- MailDefinition.cs
- XmlNamespaceDeclarationsAttribute.cs
- UserControlBuildProvider.cs
- DefaultBinder.cs
- XmlDictionaryString.cs
- RegexTypeEditor.cs
- UIPropertyMetadata.cs
- Funcletizer.cs
- MetadataHelper.cs
- CompiledRegexRunner.cs
- KeySplineConverter.cs
- DataBindingCollectionEditor.cs
- QilScopedVisitor.cs
- StandardBindingElement.cs
- AddInDeploymentState.cs
- WindowsPrincipal.cs
- MSHTMLHost.cs
- SystemIcons.cs
- AdornerPresentationContext.cs
- ProfileServiceManager.cs
- VerbConverter.cs
- WsdlParser.cs
- PasswordBoxAutomationPeer.cs
- Trigger.cs
- StaticExtensionConverter.cs
- StreamSecurityUpgradeInitiatorAsyncResult.cs
- DataGridViewColumnConverter.cs
- DependencyPropertyHelper.cs
- ProviderSettings.cs
- WebPartUtil.cs
- CalendarDayButton.cs
- AuthorizationSection.cs
- HttpStaticObjectsCollectionWrapper.cs
- RealProxy.cs
- EntityDataSourceChangedEventArgs.cs
- RowToFieldTransformer.cs
- Flattener.cs
- TargetControlTypeCache.cs
- RecordConverter.cs
- OleTxTransaction.cs
- TemplateBuilder.cs
- MultilineStringConverter.cs
- AnimationException.cs
- GZipStream.cs
- SHA1CryptoServiceProvider.cs
- DataGridViewCellCollection.cs
- WindowsIPAddress.cs
- KeyPressEvent.cs
- InvalidPropValue.cs
- Header.cs
- InvokePattern.cs
- WebBrowserNavigatingEventHandler.cs
- RawKeyboardInputReport.cs
- Axis.cs
- UpdateTranslator.cs
- ImageSource.cs
- ClientSettingsSection.cs
- HelpInfo.cs
- ZeroOpNode.cs
- InArgumentConverter.cs
- GroupItem.cs
- PackWebRequest.cs
- BinaryReader.cs
- IisTraceWebEventProvider.cs
- Compiler.cs
- TextPenaltyModule.cs
- DoubleLinkListEnumerator.cs
- JsonReaderWriterFactory.cs
- SchemaManager.cs
- TreeNodeCollection.cs
- DesignerVerb.cs
- WeakEventManager.cs
- Soap11ServerProtocol.cs