2009-02-25 10 views
6

Necesito agregar a la página desde un control personalizado. No puedo usar una hoja de estilo (.css) porque estoy usando una url (...) y necesito resolver la url.ASP.NET 2.0 agrega estilos dinámicamente a la página en un control

En este momento estoy haciendo:

Page.Header.Controls.Add(new LiteralControl("<style type='text/css'>.xyz { color: blue; }</style>")); 

Pero estoy esperando algo un toque más elegante?

Respuesta

3

Supongo que no es una mala solución para el problema. Si usted tenía un archivo de hoja de estilo externa , esta pieza de código hará el trabajo:

HtmlLink cssRef = new HtmlLink(); 
cssRef.Href = "styles/main.css"; 
cssRef.Attributes["rel"] = "stylesheet"; 
cssRef.Attributes["type"] = "text/css"; 
Page.Header.Controls.Add(cssRef); 

Otra idea es escribir su propio ASP.NET ServerControl "HtmlInlineStyle", por lo que se podría llamar de esta manera (etiquetas de script se llevaría a cabo mediante el control de servidor):

Page.Header.Controls.Add(
    New HtmlInlineStyle(".xyz { width:300px;padding-left:10px }"); 

Este blog entry y las observaciones muestran algunas alternativas (ScriptManager.RegisterClientScriptBlock). Pero en mi opinión tu solución está bien.

+0

¿Qué es HtmlInlineStyle? No puedo encontrar esta clase. –

+0

@AntonPutov No existe dicha clase en el marco de .NET. Fue una sugerencia escribir tu propio control de servidor. – splattne

1

Ésta es otra manera ... Por ejemplo:

Padres porción ASPX:

<div id="div1" class="xyz" style="width: 40px; height: 40px;"> 
    <span>abc</span> 
</div> 

dentro del control:

Dim xyzStyle As New Style() 
xyzStyle.CssClass = "xyz" 
xyzStyle.BackColor = Drawing.Color.LightBlue 
Page.Header.StyleSheet.CreateStyleRule(xyzStyle, Nothing, ".xyz") 

Tenga en cuenta que esto supone que la página ASPX padre tiene la atributo de clase establecido para el control de destino. De lo contrario, necesitará fusionar el estilo con el control utilizando el método MergeStyle. (Esto requiere que el control sea runat="server").

Este código hace que la salida siguiente: (Mostrando toda fuente para su conveniencia)

<html> 
<head> 
    <title>Untitled Page </title> 
    <style type="text/css"> 
    .xyz { background-color:LightBlue; } 
    </style> 
</head> 
<body> 
    <form name="form1" method="post" action="MyPage.aspx" id="form1"> 
    <div id="div1" class="xyz" style="width: 40px; height: 40px;"> 
     <span>abc</span> 
    </div> 
    </form> 
</body> 
</html> 
+1

Sí ... Encontré CreateStyleRule pero realmente me molestó ver que no proporcionaba una manera de proporcionar una configuración de cadena de "estilos" extra. Los atributos de estilo que necesito no son en su mayoría parte del objeto Style(). – user53794

+0

Hmmm ... bastante bien. No he encontrado una manera de evitar ese problema. – Cerebrus

0

puedo crear mi propia clase y heredan estilo, con mi propio diccionario de atributos que la clase de estilo por defecto no incluye. Aquí hay un breve ejemplo ...

   protected override void FillStyleAttributes(CssStyleCollection attributes, IUrlResolutionService urlResolver) 
    { 
     Dictionary<String, String> _styles = new Dictionary<string, string>(); 
     _styles.Add("display", "inline-block"); 
     foreach (String s in _styles.Keys) 
     { 
      attributes[s] = (String)_styles[s]; 
     } 
     base.FillStyleAttributes(attributes, urlResolver); 
    } 
Cuestiones relacionadas