Deep confusion:use ControlStyle, or Style statebag?

S

Sky

Hello... Need help desperatly -- am completly losing it here, trying to
figure out how MS intended us to use Styles in their controls....


Does anybody know anything about ControlStyle -- how to create one, when to
use, costs v. benefits?

I'm just not sure which way to Rome, when creating new Controls....use Style
dictionary/statebag? Or create a custom extension of the base Style class?

Routes that I have taken so far, while trying to figure out the answer:

a) Add a TypeConverter to the Style:
[TypeConverter(typeof(ExpandableObjectConverter))]
public Style MyStyle{get {return base.ControlStyle;}}

Wow!!!!

That changes everything in the IDE -- it actually makes a LOT more
sense...the properties like Height/Width/BorderColor, etc. are now in an
expandable +/- section (eg: like Font properties) all grouped in one area.
Seems to me to be MUCH better than having these Css properties as part of
the control itself which I think would be better suited by separating
Behaviour properties from style properties... Anybody concur?
Only glitch....works in the IDE, but not in run-time.
It appears that I don't yet know how to trigger the following bool flag:
public bool ControlStyleCreated {get;}


b) Now -- although this seems to me to be much better in terms of
IDE/Logical layout of the control -- the fact that the values that I am
imputing into the IDE are going somwhere and being preserved -- but not
showing up in the back HTML, or being used at run-time, tells me that that
its a SECOND style object... i.e...This is a State class -- and the
MyControl.Style property is pointing to a StateBag.
So that REALLY confuses me!
Q: Why are there TWO solutions?
Q: Why are they not already merged/wired up together?
Q: Is there a way to merge them together? How can I get the control to parse
the style="" from the html and add /populate the ControlState class
instance? Do I want to/should not want to? How about the other way? Use the
ControlState class instance to create a style="" string?
Q: Is there a ViewState penalty using one approach versus another?
Q: If not wired up so that changes to ControlStyle affect Style, and
vice-versa, Which one takes precendance? In other words, if I set
BorderStyle in both, which one will be rendered as a style attribute in the
final output? The values of State, the values of ControlStyle, or BOTH????
I've already seen that ASP messes up by outputing both in some cases: if you
set MyControl.BackgroundColor = "red"; and you set
MyControl.Style["BACKGROUND-COLOR"] = "blue", the output is....:
<.... style="background-color:red;BACKGROUND-COLOR:blue"...> ...


Anyway -- anybody who can definatly clear up this spagetti and tell me when
to use what/when...wow. Thanks. :)

Sky


PS:

I just wrote an extension of Style -- because I was frustrated that the
basic one given by MS was put on too much of a diet -----
but...as I'm not sure of what I am doing, I'm not sure that it can be used
as I originally intended:
I include it below in case it can help someone else?

public class XActStyle : Style {

public enum eCursorStyle{

auto,//Default

hand,

crosshair,

help,

move,

text,

wait

}

public enum ePositionStyle{

Static, //Default

Relative,

Absolute

}

public enum eOverFlowStyle {

visible,//Default

scroll,

hidden,

auto

}

public enum eTextAlignStyle{

left,//Default.

right,

center,

justify

}

public enum eVerticalAlignStyle{

auto,//Default

baseline,

middle,

bottom,

text_top,

text_bottom

}

string tPrefix = "css_";


public XActStyle():base(){

//this.AddAttributesToRender

//this.CopyFrom

//this.CreateObjRef

//this.IsTrackingViewState

//this.LoadViewState

//this.MergeWith

//this.Reset

//this.SaveViewState

//this.ToString

//this.TrackViewState

//this.Width

//this.Height

}

public XActStyle(StateBag qViewState):base(qViewState){}

//-----------------------

public eCursorStyle Cursor{

get {object tResult = ViewState[tPrefix + "cursor"];if (tResult !=
null){return (eCursorStyle)tResult;}else{return eCursorStyle.auto;}}

set {if (((eCursorStyle)value)!=eCursorStyle.auto){ViewState[tPrefix +
"cursor"]=value;}else{ViewState[tPrefix + "cursor"]=null;}}

}

public ePositionStyle Position{

get {object tResult = ViewState[tPrefix + "position"];if (tResult !=
null){return (ePositionStyle)tResult;}else{return ePositionStyle.Static;}}

set {if (((ePositionStyle)value)!=ePositionStyle.Static){ViewState[tPrefix +
"position"]=value;}else{ViewState[tPrefix + "position"]=null;}}

}

public eOverFlowStyle OverFlow{

get {object tResult = ViewState[tPrefix + "overflow"];if (tResult !=
null){return (eOverFlowStyle)tResult;}else{return eOverFlowStyle.visible;}}

set {if (((eOverFlowStyle)value)!=eOverFlowStyle.visible){ViewState[tPrefix
+ "overflow"]=value;}else{ViewState[tPrefix + "overflow"]=null;}}

}

public eOverFlowStyle OverFlowX{

get {object tResult = ViewState[tPrefix + "overflow-x"];if (tResult !=
null){return (eOverFlowStyle)tResult;}else{return eOverFlowStyle.visible;}}

set {if (((eOverFlowStyle)value)!=eOverFlowStyle.visible){ViewState[tPrefix
+ "overflow-x"]=value;}else{ViewState[tPrefix + "overflow-x"]=null;}}

}

public eOverFlowStyle OverFlowY{

get {object tResult = ViewState[tPrefix + "overflow-y"];if (tResult !=
null){return (eOverFlowStyle)tResult;}else{return eOverFlowStyle.visible;}}

set {if (((eOverFlowStyle)value)!=eOverFlowStyle.visible){ViewState[tPrefix
+ "overflow-y"]=value;}else{ViewState[tPrefix + "overflow-y"]=null;}}

}

public eTextAlignStyle TextAlign{

get {object tResult = ViewState[tPrefix + "text-align"];if (tResult !=
null){return (eTextAlignStyle)tResult;}else{return eTextAlignStyle.left;}}

set {if (((eTextAlignStyle)value)!=eTextAlignStyle.left){ViewState[tPrefix +
"text-align"]=value;}else{ViewState[tPrefix + "text-align"]=null;}}

}

public eVerticalAlignStyle VerticalAlign{

get {object tResult = ViewState[tPrefix + "vertical-align"];if (tResult !=
null){return (eVerticalAlignStyle)tResult;}else{return
eVerticalAlignStyle.auto;}}

set {if
(((eVerticalAlignStyle)value)!=eVerticalAlignStyle.auto){ViewState[tPrefix +
"vertical-align"]=value;}else{ViewState[tPrefix + "vertical-align"]=null;}}

}

//-----------------------

public Unit Margin{

get {object tResult = ViewState[tPrefix + "margin"];if (tResult !=
null){return (Unit)tResult;}else{return Unit.Empty;}}

set {if (((Unit)value)!=Unit.Empty){ViewState[tPrefix +
"margin"]=value;}else{ViewState[tPrefix + "margin"]=null;}}

}

public Unit MarginTop{

get {object tResult = ViewState[tPrefix + "margin-top"];if (tResult !=
null){return (Unit)tResult;}else{return Unit.Empty;}}

set {if (((Unit)value)!=Unit.Empty){ViewState[tPrefix +
"margin-top"]=value;}else{ViewState[tPrefix + "margin-top"]=null;}}

}

public Unit MarginRight{

get {object tResult = ViewState[tPrefix + "margin-right"];if (tResult !=
null){return (Unit)tResult;}else{return Unit.Empty;}}

set {if (((Unit)value)!=Unit.Empty){ViewState[tPrefix +
"margin-right"]=value;}else{ViewState[tPrefix + "margin-right"]=null;}}

}

public Unit MarginBottom{

get {object tResult = ViewState[tPrefix + "margin-bottom"];if (tResult !=
null){return (Unit)tResult;}else{return Unit.Empty;}}

set {if (((Unit)value)!=Unit.Empty){ViewState[tPrefix +
"margin-bottom"]=value;}else{ViewState[tPrefix + "margin-bottom"]=null;}}

}

public Unit MarginLeft{

get {object tResult = ViewState[tPrefix + "margin-left"];if (tResult !=
null){return (Unit)tResult;}else{return Unit.Empty;}}

set {if (((Unit)value)!=Unit.Empty){ViewState[tPrefix +
"margin-left"]=value;}else{ViewState[tPrefix + "margin-left"]=null;}}

}

public Unit Padding{

get {object tResult = ViewState[tPrefix + "padding"];if (tResult !=
null){return (Unit)tResult;}else{return Unit.Empty;}}

set {if (((Unit)value)!=Unit.Empty){ViewState[tPrefix +
"padding"]=value;}else{ViewState[tPrefix + "padding"]=null;}}

}

public Unit PaddingTop{

get {object tResult = ViewState[tPrefix + "padding-top"];if (tResult !=
null){return (Unit)tResult;}else{return Unit.Empty;}}

set {if (((Unit)value)!=Unit.Empty){ViewState[tPrefix +
"padding-top"]=value;}else{ViewState[tPrefix + "padding-top"]=null;}}

}

public Unit PaddingRight{

get {object tResult = ViewState[tPrefix + "padding-right"];if (tResult !=
null){return (Unit)tResult;}else{return Unit.Empty;}}

set {if (((Unit)value)!=Unit.Empty){ViewState[tPrefix +
"padding-right"]=value;}else{ViewState[tPrefix + "padding-right"]=null;}}

}

public Unit PaddingBottom{

get {object tResult = ViewState[tPrefix + "padding-bottom"];if (tResult !=
null){return (Unit)tResult;}else{return Unit.Empty;}}

set {if (((Unit)value)!=Unit.Empty){ViewState[tPrefix +
"padding-bottom"]=value;}else{ViewState[tPrefix + "padding-bottom"]=null;}}

}

public Unit PaddingLeft{

get {object tResult = ViewState[tPrefix + "padding-left"];if (tResult !=
null){return (Unit)tResult;}else{return Unit.Empty;}}

set {if (((Unit)value)!=Unit.Empty){ViewState[tPrefix +
"padding-left"]=value;}else{ViewState[tPrefix + "padding-left"]=null;}}

}

public Unit TextIndent{

get {object tResult = ViewState[tPrefix + "text-indent"];if (tResult !=
null){return (Unit)tResult;}else{return Unit.Empty;}}

set {if (((Unit)value)!=Unit.Empty){ViewState[tPrefix +
"text-indent"]=value;}else{ViewState[tPrefix + "text-indent"]=null;}}

}

//-----------------------

//And for the fun of it....

public bool EffectDropShadow{

get {object tResult = ViewState[tPrefix + "e_dropshadow"];if (tResult !=
null){return (bool)tResult;}else{return false;}}

set {if (((bool)value)!=false){ViewState[tPrefix +
"e_dropshadow"]=value;}else{ViewState[tPrefix + "e_dropshadow"]=null;}}

}

//-----------------------

//Example: Simple wrapping to get it back to W3C naming...

public System.Drawing.Color Color {

get {return base.ForeColor;}set{base.ForeColor=value;}

}

//Clear

//Clip

//Filter

//Direction

//Display

//Visibility

//text-indent

//text-justify

//z-index

//zoom

//white-space





void AddAttributesToRender(HtmlTextWriter writer, WebControl owner){

base.AddAttributesToRender(writer,owner);//Ensure base style class adds its
attrs to the output stream...

//Now for ours:

//-----------------------

if (ViewState[tPrefix+"cursor"]!=null){

writer.AddStyleAttribute("cursor",Enum.Format(typeof(eCursorStyle),((eCursor
Style)ViewState[tPrefix+"cursor"]),"G"));

}

if (ViewState[tPrefix+"position"]!=null){

writer.AddStyleAttribute("position",Enum.Format(typeof(eCursorStyle),((eCurs
orStyle)ViewState[tPrefix+"position"]),"G"));

}

if (ViewState[tPrefix+"overflow"]!=null){

writer.AddStyleAttribute("overflow",Enum.Format(typeof(eOverFlowStyle),((eOv
erFlowStyle)ViewState[tPrefix+"overflow"]),"G"));

}

if (ViewState[tPrefix+"overflow-x"]!=null){

writer.AddStyleAttribute("overflow-x",Enum.Format(typeof(eOverFlowStyle),((e
OverFlowStyle)ViewState[tPrefix+"overflow-x"]),"G"));

}

if (ViewState[tPrefix+"overflow-y"]!=null){

writer.AddStyleAttribute("overflow-y",Enum.Format(typeof(eOverFlowStyle),((e
OverFlowStyle)ViewState[tPrefix+"overflow-y"]),"G"));

}

if (ViewState[tPrefix+"text-align"]!=null){

writer.AddStyleAttribute("text-align",Enum.Format(typeof(eTextAlignStyle),((
eTextAlignStyle)ViewState[tPrefix+"text-align"]),"G").Replace('_','-'));

}

if (ViewState[tPrefix+"vertical-align"]!=null){

writer.AddStyleAttribute("vertical-align",Enum.Format(typeof(eVerticalAlignS
tyle),((eVerticalAlignStyle)ViewState[tPrefix+"vertical-align"]),"G").Replac
e('_','-'));

}

//-----------------------

if (ViewState[tPrefix+"margin"]!=null){

writer.AddStyleAttribute(tPrefix+"margin",((Unit)ViewState[tPrefix+"margin"]
).ToString());

}

if (ViewState[tPrefix+"margin-top"]!=null){

writer.AddStyleAttribute(tPrefix+"margin-top",((Unit)ViewState[tPrefix+"marg
in-top"]).ToString());

}

if (ViewState[tPrefix+"margin-right"]!=null){

writer.AddStyleAttribute(tPrefix+"margin-right",((Unit)ViewState[tPrefix+"ma
rgin-right"]).ToString());

}

if (ViewState[tPrefix+"margin-bottom"]!=null){

writer.AddStyleAttribute(tPrefix+"margin-bottom",((Unit)ViewState[tPrefix+"m
argin-bottom"]).ToString());

}

if (ViewState[tPrefix+"margin-left"]!=null){

writer.AddStyleAttribute(tPrefix+"margin-left",((Unit)ViewState[tPrefix+"mar
gin-left"]).ToString());

}

//-----------------------

if (ViewState[tPrefix+"padding"]!=null){

writer.AddStyleAttribute("padding",((Unit)ViewState[tPrefix+"padding"]).ToSt
ring());

}

if (ViewState[tPrefix+"padding-top"]!=null){

writer.AddStyleAttribute(tPrefix+"padding-top",((Unit)ViewState[tPrefix+"pad
ding-top"]).ToString());

}

if (ViewState[tPrefix+"padding-right"]!=null){

writer.AddStyleAttribute(tPrefix+"padding-right",((Unit)ViewState[tPrefix+"p
adding-right"]).ToString());

}

if (ViewState[tPrefix+"padding-bottom"]!=null){

writer.AddStyleAttribute(tPrefix+"padding-bottom",((Unit)ViewState[tPrefix+"
padding-bottom"]).ToString());

}

if (ViewState[tPrefix+"padding-left"]!=null){

writer.AddStyleAttribute(tPrefix+"padding-left",((Unit)ViewState[tPrefix+"pa
dding-left"]).ToString());

}

if (ViewState[tPrefix+"text-indent"]!=null){

writer.AddStyleAttribute("text-indent",((Unit)ViewState[tPrefix+"text-indent
"]).ToString());

}

//-----------------------

if (ViewState[tPrefix+"e_dropshadow"]!=null){

writer.AddStyleAttribute("filter","progid:DXImageTransform:Microsoft.dropsha
dow(OffX=2,OffY=2,Color='gray',Positive='true';");

}

//-----------------------

}

public override void CopyFrom(Style qStyle){

base.CopyFrom(qStyle);

//Now ours:

_SetStyles(qStyle,true);

}

public override void MergeWith(Style qStyle){

base.MergeWith(qStyle);

//Now ours:

_SetStyles(qStyle,false);

}

private void _SetStyles(Style qStyle, bool qAlwaysOverride){

XActStyle tStyle = qStyle as XActStyle;

if (tStyle!=null){

//Seems to be good to go:

if ((qAlwaysOverride)||(ViewState[tPrefix + "cursor"]==null)){Cursor =
tStyle.Cursor;}

if ((qAlwaysOverride)||(ViewState[tPrefix + "position"]==null)){Position =
tStyle.Position;}

if ((qAlwaysOverride)||(ViewState[tPrefix + "overflow"]==null)){OverFlow =
tStyle.OverFlow;}

if ((qAlwaysOverride)||(ViewState[tPrefix + "overflow-x"]==null)){OverFlowX
= tStyle.OverFlowX;}

if ((qAlwaysOverride)||(ViewState[tPrefix + "overflow-y"]==null)){OverFlowY
= tStyle.OverFlowY;}

if ((qAlwaysOverride)||(ViewState[tPrefix + "text-align"]==null)){TextAlign
= tStyle.TextAlign;}

if ((qAlwaysOverride)||(ViewState[tPrefix +
"vertical-align"]==null)){VerticalAlign = tStyle.VerticalAlign;}

if ((qAlwaysOverride)||(ViewState[tPrefix + "margin"]==null)){Margin =
tStyle.Margin;}

if ((qAlwaysOverride)||(ViewState[tPrefix + "margin-top"]==null)){MarginTop
= tStyle.MarginTop;}

if ((qAlwaysOverride)||(ViewState[tPrefix +
"margin-right"]==null)){MarginRight = tStyle.MarginRight;}

if ((qAlwaysOverride)||(ViewState[tPrefix +
"margin-bottom"]==null)){MarginBottom = tStyle.MarginBottom;}

if ((qAlwaysOverride)||(ViewState[tPrefix +
"margin-left"]==null)){MarginLeft = tStyle.MarginLeft;}


if ((qAlwaysOverride)||(ViewState[tPrefix + "padding"]==null)){Padding =
tStyle.Padding;}

if ((qAlwaysOverride)||(ViewState[tPrefix +
"padding-top"]==null)){PaddingTop = tStyle.PaddingTop;}

if ((qAlwaysOverride)||(ViewState[tPrefix +
"padding-right"]==null)){PaddingRight = tStyle.PaddingRight;}

if ((qAlwaysOverride)||(ViewState[tPrefix +
"padding-bottom"]==null)){PaddingBottom = tStyle.PaddingBottom;}

if ((qAlwaysOverride)||(ViewState[tPrefix +
"padding-left"]==null)){PaddingLeft = tStyle.PaddingLeft;}

if ((qAlwaysOverride)||(ViewState[tPrefix +
"text-indent"]==null)){TextIndent = tStyle.TextIndent ;}

if ((qAlwaysOverride)||(ViewState[tPrefix +
"e_dropshadow"]==null)){EffectDropShadow = tStyle.EffectDropShadow;}

}

}

public override void Reset(){

ViewState[tPrefix + "cursor"]=null;

ViewState[tPrefix + "position"]=null;

ViewState[tPrefix + "overflow"]=null;

ViewState[tPrefix + "overflow-x"]=null;

ViewState[tPrefix + "overflow-y"]=null;

ViewState[tPrefix + "text-align"]=null;

ViewState[tPrefix + "vertical-align"]=null;


ViewState[tPrefix + "margin"]=null;

ViewState[tPrefix + "margin-top"]=null;

ViewState[tPrefix + "margin-right"]=null;

ViewState[tPrefix + "margin-bottom"]=null;

ViewState[tPrefix + "margin-left"]=null;


ViewState[tPrefix + "padding"]=null;

ViewState[tPrefix + "padding-top"]=null;

ViewState[tPrefix + "padding-right"]=null;

ViewState[tPrefix + "padding-bottom"]=null;

ViewState[tPrefix + "padding-left"]=null;

ViewState[tPrefix + "text-indent"]=null;

ViewState[tPrefix + "e_dropshadow"]=null;

}

}//Class:End
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,994
Messages
2,570,223
Members
46,813
Latest member
lawrwtwinkle111

Latest Threads

Top