0

这个问题的灵感来自于我border-width: 0px;在 ImageButton Web 控件上发现了非常烦人的默认样式 ( )。简单的解决方案是通过将您自己的样式添加到控件来覆盖它,例如Style="border-width: 2px;".

无论如何,如果只是制作一个简单的控件适配器,它会在正确的位置介入并告诉控件不要呈现默认样式,那就太好了。

在查看了来自 CSSFriendly ControlAdapter 项目的代码之后,似乎他们正在重新创建大部分渲染,这对于我想要做的事情来说太过分了——即只需更改渲染出来的默认样式。

那么问题来了,如何只通过控制适配器修改默认样式的渲染,其余的保持原样?

甚至可能吗?

谢谢,埃吉尔。

4

1 回答 1

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>
于 2009-02-04T01:53:24.500 回答