我对这个问题的启发是我在ImageButton网页控件上发现了非常讨厌的默认样式(border-width: 0px;
)。简单的解决方案是通过向控件添加自己的样式来覆盖它,例如Style="border-width: 2px;"
。
如果只是制作一个简单的控制适配器,只需要在正确的位置插入并告诉控件不要呈现默认样式,那将是多么好。
在看了一下CSSFriendly ControlAdapter项目的代码之后,似乎他们正在重新创建大部分渲染,这对我想做的事情来说太过分了 - 即只是改变渲染出来的默认样式。 / p>
所以问题是,如何通过控制适配器修改默认样式的渲染,剩下的就是这样?
甚至可能吗?
谢谢,Egil。
答案 0 :(得分:4)
有两种方法可以做到这一点。两者都需要编写自定义控制适配器。您可以在代码中设置实际值,也可以根本不包含该值,然后使用CSS设置您的值。这是您需要执行此操作的代码。
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);
}
}
}
}
然后,您需要在此浏览器文件中添加一个条目
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.WebControls.Image" adapterType="TestApp.ImageAdapter, TestApp" />
</controlAdapters>
</browser>
</browsers>