asp.net css control-adapter

asp.net - ¿Cómo construir ImageButton Control Adapter(o más en general, cómo construir un adaptador de control simple)?



css control-adapter (1)

Hay dos maneras de hacer esto. Ambos requerirán escribir un Adaptador de control personalizado. O bien puede establecer el valor real en el código, o simplemente no puede incluir el valor en absoluto y luego usar CSS para establecer su valor. Aquí está el código que necesitarás para hacer esto.

namespace TestApp { using System.IO; using System.Web.UI; using System.Web.UI.Adapters; public class ImageAdapter : ControlAdapter { protected override void Render(HtmlTextWriter writer) { base.Render(new RewriteImageHtmlTextWriter(writer)); } public class RewriteImageHtmlTextWriter : HtmlTextWriter { public RewriteImageHtmlTextWriter(TextWriter writer) : base(writer) { InnerWriter = writer; } public RewriteImageHtmlTextWriter(HtmlTextWriter writer) : base(writer) { InnerWriter = writer.InnerWriter; } public override void AddAttribute(HtmlTextWriterAttribute key, string value, bool fEncode) { if (key == HtmlTextWriterAttribute.Border) { // change the value //value = "2"; // -or- // don''t include the value //return; } base.AddAttribute(key, value, fEncode); } public override void AddStyleAttribute(HtmlTextWriterStyle key, string value) { if (key == HtmlTextWriterStyle.BorderWidth) { // change the value //value = "2px"; // -or- // don''t include the value //return; } base.AddStyleAttribute(key, value); } } } }

Luego, deberá agregar una entrada en uno de sus archivos de navegador como este

<browsers> <browser refID="Default"> <controlAdapters> <adapter controlType="System.Web.UI.WebControls.Image" adapterType="TestApp.ImageAdapter, TestApp" /> </controlAdapters> </browser> </browsers>

Mi inspiración para esta pregunta fue mi descubrimiento del muy molesto estilo predeterminado ( border-width: 0px; ) en el control web ImageButton. La solución simple es anularlo agregando su propio estilo al control, por ejemplo, Style="border-width: 2px;" .

Como todos, hubiera sido agradable simplemente hacer un adaptador de control simple que simplemente entraría en el lugar correcto y simplemente le diría al control que no muestre el estilo predeterminado.

Después de mirar un poco el código del proyecto CSSFriendly ControlAdapter, parece que están recreando gran parte del renderizado, que es excesivo para lo que quiero hacer, es decir, simplemente cambie el estilo predeterminado que se renderiza.

Entonces la pregunta, ¿cómo modificar la representación de los estilos predeterminados a través de los adaptadores de control, y dejar el resto tal como está?

¿Es posible?

Gracias, Egil.