0

border-width: 0px;この質問のきっかけとなったのは、ImageButton Web コントロールの非常に煩わしいデフォルト スタイル ( ) を発見したことです。簡単な解決策は、独自のスタイルをコントロールに追加してオーバーライドすることStyle="border-width: 2px;"です。

どのようにでも、単純なコントロール アダプターを作成して、適切な場所に介入し、コントロールに既定のスタイルをレンダリングしないように指示するだけでよかったでしょう。

CSSFriendly ControlAdapter プロジェクトのコードを少し調べたところ、レンダリングの大部分を再作成しているように見えます。これは、私がやりたいことにはやり過ぎです。つまり、レンダリングされるデフォルトのスタイルを変更するだけです。

質問は、コントロール アダプターを介して既定のスタイルのレンダリングを変更し、残りをそのままにしておく方法です。

それは可能ですか?

ありがとう、エギル。

4

1 に答える 1

4

これには 2 つの方法があります。どちらも、カスタム コントロール アダプターを作成する必要があります。コードで実際の値を設定することも、値をまったく含めずに 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);
            }
        }
    }
}

次に、次のようにブラウザ ファイルの 1 つにエントリを追加する必要があります。

<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 に答える