Laden...

Style Converter Klasse

Erstellt von gosiggi vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.057 Views
gosiggi Themenstarter:in
129 Beiträge seit 2007
vor 16 Jahren
Style Converter Klasse

Beschreibung:

Eines hat mich bisher beim erstellen von Server Controls immer gestört und zwar das der Compiler eigentlich immer die Css Eigenschaft Display so gesetzt hat wie er es will nämlich auf display:inline-block. Was dann dazu führte das der FireFox zum beispiel die vorgebene Breite nicht umsetze weil es ja ein inline-block Element ist. Merkwürdiger ist jedoch das der Opera sowie der IE dieses irgendwie ignorieren und zum beispiel die Breite 200px auch so anzeigen.

Nun gut dachte ich mir warum nicht einfach eine Klasse erstellen, die alle eingegebenen Werte eines Style Propertys in einen einzigen String umwandelt und diesen wieder zurück gibt.

Also habe ich mich mal hingesetzt und diese kleine Helper Klasse geschrieben, welche im Falle das eine CssClass gesetzt wird auf jeden fall einen leeren String zurück gibt, und dem Entwickler somit genug Spielraum gegeben ist wie er im Falle eines leeren Strings weiter verfährt.

Die Klasse ist geeignet für den Style sowie TableItemStyle die Implementierung eines TableStyles ist jedoch ebenfalls möglich.

**Beispiel um eine Style Eigenschaft in einen String umwandeln zu lassen. **


        private string CreateStyleString(TableItemStyle style)
        {
            //Das einzigste was zu beachten ist, ist das der
            //Display Type mit angegeben werden muss,
            //wie zum Beispiel: block oder inline-block
            //oder aber jede andere Css Display Eigenschaft

            //Rückgabe als StyleString
            return StyleConverter.GetCssStyleString(style, "block");
        }

Falls irgendwer noch Fehler finden sollte, oder aber Tips hat was ich noch verändern könnte, oder sollte, so möge er es mir doch bitte mitteilen.... 🙂

Hier nun die Klasse StyleConverter


using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;

namespace CustomStyleConverter
{
    /// <summary>
    /// Klasse um einen TableItemStyle oder einen Style in einen
    /// gesamt String umzuwandeln, dies ist praktisch wenn man 
    /// eigene ServerControls erstellt, und die StyleAttribute direkt dem
    /// zu renderden WebControl übergeben möchte.
    /// Besonders praktisch auch wenn man nicht will das Labels als Inline-Block gerendert werden
    /// </summary>
    public static class StyleConverter
    {
        /// <summary>
        /// Prüfen ob BorderWidth gesetzt wurde,
        /// falls nicht wird BorderWidth auf 1px gesetzt
        /// </summary>
        /// <param name="borderWidth">Die zu prüfende BorderWidth</param>
        /// <returns>String BorderWidth</returns>
        private static string CheckBorderWidth(string borderWidth)
        {
            //Falls BorderWidth gesetzt wurde,
            //wird der aktuelle Wert zurück gegeben
            if (borderWidth != "")
                return borderWidth;

            //BorderWidth wurde nicht gesetzt,
            //wird nun auf 1px gesetzt
            return "1px";
        }
        /// <summary>
        /// Prüfen ob BorderColor gesetzt wurde,
        /// falls nicht wird BorderColor auf #000000 (schwarz) gesetzt
        /// </summary>
        /// <param name="borderColor">Der zu prüfende BorderColor </param>
        /// <returns>String BorderColor</returns>
        private static string CheckBorderColor(string borderColor)
        {
            //Falls BorderColor gesetzt wurde,
            //wird der aktuelle Farbwert zurück gegeben
            if (borderColor != "")
                return borderColor;

            //BorderColor wurde nicht gesetzt,
            //wird nun auf #000000 (schwarz) gesetzt
            return "#000000";
        }
        /// <summary>
        /// Prüfen ob BorderStyle (NotSet) oder (None) ist,
        /// fallls nicht, wird der gesamte Border Part des Styles hier abgearbeitet
        /// </summary>
        /// <param name="borderStyle">aktueller BorderStyle</param>
        /// <param name="borderWidth">aktuelle BorderWidth</param>
        /// <param name="borderColor">aktuelle BorderColor</param>
        /// <param name="sb">aktuelles StringBuilder Objekt</param>
        private static void CheckBorder(BorderStyle borderStyle, string borderWidth,
            string borderColor, StringBuilder sb)
        {

            //Prüfen ob BorderStyle nicht auf (NotSet) oder (None) gesetzt wurde
            if (!(borderStyle == BorderStyle.NotSet) || (borderStyle == BorderStyle.None))
            {
                //Das Border Attribut wird dem Style String zugefügt
                sb.Append("border:");
                sb.Append(borderStyle.ToString().ToLower());
                sb.Append(" ");
                sb.Append(CheckBorderWidth(borderWidth));
                sb.Append(" ");
                sb.Append(CheckBorderColor(borderColor));
                sb.Append("; ");
            }
        }

        /// <summary>
        /// Prüfen ob Font-Names gesetzt wurden, falls ja werden
        /// diese abgearbeitet, und als String zurückgegeben
        /// </summary>
        /// <param name="fontNames">aktuelle Font.Names</param>
        /// <returns>String fontNames</returns>
        private static string CheckFontNames(string[] fontNames)
        {
            //Local Member
            StringBuilder sb = new StringBuilder();
            int i = 0;
            //Font-Names dem Stringbuilder zufügen
            foreach (string name in fontNames)
            {
                //Prüfen ob überhaupt Font-Names vorhanden sind
                if (name != string.Empty)
                {
                    sb.Append(name.ToLower());
                    i++;
                }
                //Prüfen ob das Ende der Font-Names erreicht wurde,
                //falls nicht dem String ein (,) als Seperator zufügen
                if (i < fontNames.Length)
                    sb.Append(",");
            }

            //gefundene Font-Names in neuem String ablegen
            string names = sb.ToString();

            //Wurden keine Font-Names gefunden, wird ein leerer String ausgeliefert.
            if (names == string.Empty)
                return string.Empty;

            //Neue Instanz des StringBuilders generieren
            sb = new StringBuilder();

            //Hinzufügen des Style Attributes sowie der gefunden Font-Names
            sb.Append("font-family:");
            sb.Append(names);
            sb.Append("; ");
            //Ergebnis ausliefern
            return sb.ToString();
        }
        /// <summary>
        /// Prüfen ob Font (Underline),(Overline) oder (StrikeOut) gesetzt wurde
        /// </summary>
        /// <param name="underLine">Font.Underline</param>
        /// <param name="overLine">Font.Overline</param>
        /// <param name="strikeOut">Font.StrikeOut</param>
        /// <returns></returns>
        private static string CheckTextDecoration(bool underLine, bool overLine,
            bool strikeOut)
        {
            //Local Member
            StringBuilder sb = new StringBuilder();
            //Prüfen ob einer der 3 Werte gesetzt wurde
            if (underLine || overLine || strikeOut)
            {
                //dem StringBuilder den Wert (text-decoration) zufügen
                sb.Append("text-decoration:");
                //Wurde ein Wert gesetzt, wird das dementsprechende
                //StyleSheet Attribut hinzugefügt
                if (underLine)
                    sb.Append(" underline");
                if (overLine)
                    sb.Append(" overline");
                if (strikeOut)
                    sb.Append(" line-through");
                //StyleSheet Attribut abschließen und den String zurückgeben
                sb.Append("; ");
                return sb.ToString();
            }
            //Es wurde keiner der 3 Werte gesetzt, also leerer String zurück
            return string.Empty;
        }



        /// <summary>
        /// Converter um einen TableItemStyle zu einem gesamt String umzuwandeln
        /// welcher einem HtmlTextWriter als StyleAttribut übergeben werden kann
        /// Wurde jedoch eine CssClass angegeben wird ein leerer String zurück gegeben
        /// </summary>
        /// <param name="style">Umzuwandelner TableItemStyle</param>
        /// <param name="displayMode">Angabe der Display-Eigenschaft (block, inline-block usw.</param>
        /// <returns>Kompletter StyleString</returns>
        public static string GetCssStyleString(TableItemStyle style, string displayMode)
        {
            //Prüfen ob CssClass gesetzt wurde,
            //wenn ja dann wird ein leerer String zurück gegeben
            if (style.CssClass != string.Empty)
                return string.Empty;

            //Local Member
            StringBuilder sb = new StringBuilder();
            string backColor = ColorTranslator.ToHtml(style.BackColor).ToLower() ?? string.Empty;
            string foreColor = ColorTranslator.ToHtml(style.ForeColor).ToLower() ?? string.Empty;
            string borderColor = ColorTranslator.ToHtml(style.BorderColor).ToLower() ?? string.Empty;
            string borderWidth = style.BorderWidth.ToString();
            string fontSize = style.Font.Size.ToString() ?? string.Empty;
            bool underLine = style.Font.Underline;
            bool overLine = style.Font.Overline;
            bool strikeOut = style.Font.Strikeout;
            string horizontalAlign = style.HorizontalAlign.ToString().ToLower() ?? string.Empty;
            string verticalAlign = style.VerticalAlign.ToString().ToLower() ?? string.Empty;
            string width = style.Width.ToString() ?? string.Empty;
            string height = style.Height.ToString() ?? string.Empty;
            //
            //Display Mode
            //
            //Setzen der Display Eigenschaft,
            //nähere Informationen hierzu siehe:
            //http://www.css4you.de/display.html
            sb.Append("display:");
            sb.Append(displayMode.ToLower());
            sb.Append("; ");
            //
            //Color Part
            //
            //Prüfen ob BackColor überhaupt gesetzt wurde.
            if (backColor != string.Empty)
            {
                //Background-Color wird dem Style String zugefügt
                sb.Append("background-color:");
                sb.Append(backColor);
                sb.Append("; ");
            }
            //Prüfen ob ForeColor überhaupt gesetzt wurde
            if (foreColor != string.Empty)
            {
                //Color wird dem Style Strng zugefügt
                sb.Append("color:");
                sb.Append(foreColor);
                sb.Append("; ");
            }
            //
            //Border Part
            //
            //Der gesamte Border Part, sowie der StringBuilder wird
            //an die Methode CheckBorderStyle übergeben, wenn der BorderStyle
            //nicht (NotSet) oder (None) ist wird das Border Attribut dem Style String zugefügt
            CheckBorder(style.BorderStyle, borderWidth, borderColor, sb);
            //
            //Font Part
            //
            string fontFamily = CheckFontNames(style.Font.Names);
            //Prüfen ob Font-Names gesetzt wurde
            if (fontFamily != string.Empty)
                //Font-Family wird dem Style String zugefügt
                sb.Append(fontFamily);

            //Prüfen ob Font-Size gesetzt wurde
            if (fontSize != string.Empty)
            {
                //Font-Size wird dem Style String zugefügt
                sb.Append("font-size:");
                sb.Append(fontSize);
                sb.Append("; ");
            }

            //Prüfen ob eines der 3 Text-Decoration Attribute gesetzt wurde
            string textDecoration =
                CheckTextDecoration(underLine, overLine, strikeOut);
            if (textDecoration != string.Empty)
                //Text-Decoration wird dem Style String zugefügt
                sb.Append(textDecoration);

            //Prüfen ob Font-Bold gesetzt wurde
            if (style.Font.Bold)
                //Font-Weight wird dem Style String zugefügt
                sb.Append("font-weight:bold; ");

            //Prüfen ob Font-Italic gesetzt wurde
            if (style.Font.Italic)
                //Font-Style dem Style String zufügen
                sb.Append("font-style:italic; ");

            //Prüfen ob HorizontalAlign gesetzt wurde
            if (horizontalAlign != string.Empty)
            {
                //Text-Align dem Style String zufügen
                sb.Append("text-align:");
                sb.Append(horizontalAlign);
                sb.Append("; ");
            }

            //Prüfen ob VerticalAlign gesetzt wurde
            if (verticalAlign != string.Empty)
            {
                //Vertical-Align dem Style String zufügen
                sb.Append("vertical-align:");
                sb.Append(verticalAlign);
                sb.Append("; ");
            }
            //
            //Height und Width Part
            //

            //Prüfen ob Height gesetzt wurde
            if (height != string.Empty)
            {
                //Height dem Style Stringzufügen
                sb.Append("height:");
                sb.Append(height);
                sb.Append("; ");
            }

            //Prüfen ob Width gesetzt wurde
            if (width != string.Empty)
            {
                //Width dem Style String zufügen
                sb.Append("width:");
                sb.Append(width);
                sb.Append("; ");
            }

            //Den gesamten String zurück geben
            return sb.ToString();
        }

        /// <summary>
        /// Converter um einen Style zu einem gesamt String umzuwandeln
        /// welcher einem HtmlTextWriter als StyleAttribut übergeben werden kann
        /// Wurde jedoch eine CssClass angegeben wird ein leerer String zurück gegeben
        /// </summary>
        /// <param name="style">Umzuwandelner Style</param>
        /// <param name="displayMode">Angabe der Display-Eigenschaft (block, inline-block usw.</param>
        /// <returns>Kompletter StyleString</returns>
        public static string GetCssStyleString(Style style,string displayMode)
        {
            //Prüfen ob CssClass gesetzt wurde,
            //wenn ja dann wird ein leerer String zurück gegeben
            if (style.CssClass != string.Empty)
                return string.Empty;

            //Local Member
            StringBuilder sb = new StringBuilder();
            string backColor = ColorTranslator.ToHtml(style.BackColor).ToLower() ?? string.Empty;
            string foreColor = ColorTranslator.ToHtml(style.ForeColor).ToLower() ?? string.Empty;
            string borderColor = ColorTranslator.ToHtml(style.BorderColor).ToLower() ?? string.Empty;
            string borderWidth = style.BorderWidth.ToString();
            string fontSize = style.Font.Size.ToString() ?? string.Empty;
            bool underLine = style.Font.Underline;
            bool overLine = style.Font.Overline;
            bool strikeOut = style.Font.Strikeout;
            string width = style.Width.ToString() ?? string.Empty;
            string height = style.Height.ToString() ?? string.Empty;
            //
            //Display Mode
            //
            //Setzen der Display Eigenschaft,
            //nähere Informationen hierzu siehe:
            //http://www.css4you.de/display.html
            sb.Append("display:");
            sb.Append(displayMode.ToLower());
            sb.Append("; ");
            //
            //Color Part
            //
            //Prüfen ob BackColor überhaupt gesetzt wurde.
            if (backColor != string.Empty)
            {
                //Background-Color wird dem Style String zugefügt
                sb.Append("background-color:");
                sb.Append(backColor);
                sb.Append("; ");
            }
            //Prüfen ob ForeColor überhaupt gesetzt wurde
            if (foreColor != string.Empty)
            {
                //Color wird dem Style Strng zugefügt
                sb.Append("color:");
                sb.Append(foreColor);
                sb.Append("; ");
            }
            //
            //Border Part
            //
            //Der gesamte Border Part, sowie der StringBuilder wird
            //an die Methode CheckBorderStyle übergeben, wenn der BorderStyle
            //nicht (NotSet) oder (None) ist wird das Border Attribut dem Style String zugefügt
            CheckBorder(style.BorderStyle, borderWidth, borderColor, sb);
            //
            //Font Part
            //
            string fontFamily = CheckFontNames(style.Font.Names);
            //Prüfen ob Font-Names gesetzt wurde
            if (fontFamily != string.Empty)
                //Font-Family wird dem Style String zugefügt
                sb.Append(fontFamily);

            //Prüfen ob Font-Size gesetzt wurde
            if (fontSize != string.Empty)
            {
                //Font-Size wird dem Style String zugefügt
                sb.Append("font-size:");
                sb.Append(fontSize);
                sb.Append("; ");
            }

            //Prüfen ob eines der 3 Text-Decoration Attribute gesetzt wurde
            string textDecoration =
                CheckTextDecoration(underLine, overLine, strikeOut);
            if (textDecoration != string.Empty)
                //Text-Decoration wird dem Style String zugefügt
                sb.Append(textDecoration);

            //Prüfen ob Font-Bold gesetzt wurde
            if (style.Font.Bold)
                //Font-Weight wird dem Style String zugefügt
                sb.Append("font-weight:bold; ");

            //Prüfen ob Font-Italic gesetzt wurde
            if (style.Font.Italic)
                //Font-Style dem Style String zufügen
                sb.Append("font-style:italic; ");

            //
            //Height und Width Part
            //

            //Prüfen ob Height gesetzt wurde
            if (height != string.Empty)
            {
                //Height dem Style Stringzufügen
                sb.Append("height:");
                sb.Append(height);
                sb.Append("; ");
            }

            //Prüfen ob Width gesetzt wurde
            if (width != string.Empty)
            {
                //Width dem Style String zufügen
                sb.Append("width:");
                sb.Append(width);
                sb.Append("; ");
            }

            //Den gesamten String zurück geben
            return sb.ToString();
        }
    }
}


Ein Demo Projekt wie man diese Klasse bei der Erstellung von ServerControls einsetzen kann, habe ich zur Zeit nicht parat, aber ich werde mich die Tage mal hinsetzen und ein kleines Tutorial schreiben zur Erstellung eines Login Controls ohne Tabellen, und dort wird diese Klasse dann auch zum Einsatz kommen 🙂
Vorausgesetzt es gibt so ein Tutorial hier noch nicht.....

Schlagwörter: Style, TableItemStyle, Controls