When using the Page.Header.StyleSheet.CreateStyleRule method I ran into a limitation of the System.Web.UI.WebControls.Style class. I could only set a small subset of the available CSS attributes. In particular, I couldn't set text-align using the WebControls.Style class.
By overriding the Style.FillStyleAttributes method I can add additional CSS attributes to the CssStyleCollection.
class ExtendedStyle : Style
{
private Dictionary<System.Web.UI.HtmlTextWriterStyle, string> extendedAttributes;
public string TextAlign
{
get
{
return GetAttribute(System.Web.UI.HtmlTextWriterStyle.TextAlign);
}
set
{
SetAttribute(System.Web.UI.HtmlTextWriterStyle.TextAlign, value);
}
}
private string GetAttribute(System.Web.UI.HtmlTextWriterStyle attribute)
{
return (extendedAttributes.ContainsKey(attribute))?extendedAttributes[attribute]:null;
}
private void SetAttribute(System.Web.UI.HtmlTextWriterStyle attribute, string value)
{
if (value == null)
{
extendedAttributes.Remove(attribute);
}
else
{
extendedAttributes[attribute] = value;
}
}
public ExtendedStyle()
{
extendedAttributes = new Dictionary();
}
protected override void FillStyleAttributes(System.Web.UI.CssStyleCollection attributes, System.Web.UI.IUrlResolutionService urlResolver)
{
base.FillStyleAttributes(attributes, urlResolver);
foreach (System.Web.UI.HtmlTextWriterStyle attribute in this.extendedAttributes.Keys)
{
attributes[attribute] = extendedAttributes[attribute];
}
}
}
Which allows me to do the following:
Page.Header.StyleSheet.CreateStyleRule(new ExtendedStyle() { TextAlign = "right" }, this, ".foobar");