Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP .Net Web Controls > Deep confusion:use ControlStyle, or Style statebag?

Reply
Thread Tools

Deep confusion:use ControlStyle, or Style statebag?

 
 
Sky
Guest
Posts: n/a
 
      07-11-2004
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){ViewSta te[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){V iewState[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){V iewState[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(type of(eCursorStyle),((eCursor
Style)ViewState[tPrefix+"cursor"]),"G"));

}

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

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

}

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

writer.AddStyleAttribute("overflow",Enum.Format(ty peof(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)V iewState[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)ViewStat e[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","progidXImageT ransform: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




 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Deep Freeze In Deep Trouble johntangelo@gmail.com Computer Security 4 09-19-2007 03:16 AM
DataGrid header style inconsistent with sortable column style cedoucette@alum.rpi.edu ASP .Net 0 10-14-2005 12:13 AM
All style tags after the first 30 style tags on an HTML page are not applied in Internet Explorer Rob Nicholson ASP .Net 3 05-28-2005 03:11 PM
Need help with Style conversion from Style object to Style key/value collection. Ken Varn ASP .Net Building Controls 0 04-26-2004 07:06 PM
Style sheets, include one style within another (not inheritance) foldface@yahoo.co.uk HTML 1 11-24-2003 01:37 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57