我对这个问题的灵感是我发现了非常烦人的默认样式(border-width: 0px;
)在 ImageButton Web 控件上。简单的解决方案是通过向控件添加您自己的样式来覆盖它,例如Style="border-width: 2px;"
.
无论如何,如果能够制作一个简单的控件适配器,它会在正确的位置介入并告诉控件不要呈现默认样式,那就太好了。
在查看了 CSSFriendly ControlAdapter 项目的代码后,似乎他们正在重新创建大部分渲染,这对于我想要做的事情来说有点过分了——即只是更改渲染出来的默认样式。
那么问题来了,如何通过控件适配器只修改默认样式的渲染,而其余部分保持原样?
有可能吗?
谢谢,埃吉尔。
有两种方法可以做到这一点。两者都需要编写自定义控制适配器。您可以在代码中设置实际值,也可以根本不包含该值,然后使用 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)