如何构建ImageButton控件适配器(或更一般,如何构建一个简单的控件适配器)?

时间:2009-01-29 22:38:50

标签: asp.net css control-adapter

我对这个问题的启发是我在ImageButton网页控件上发现了非常讨厌的默认样式(border-width: 0px;)。简单的解决方案是通过向控件添加自己的样式来覆盖它,例如Style="border-width: 2px;"

如果只是制作一个简单的控制适配器,只需要在正确的位置插入并告诉控件不要呈现默认样式,那将是多么好。

在看了一下CSSFriendly ControlAdapter项目的代码之后,似乎他们正在重新创建大部分渲染,这对我想做的事情来说太过分了 - 即只是改变渲染出来的默认样式。 / p>

所以问题是,如何通过控制适配器修改默认样式的渲染,剩下的就是这样?

甚至可能吗?

谢谢,Egil。

1 个答案:

答案 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>