Как построить адаптер управления ImageButton (или, в более общем смысле, как создать простой адаптер управления)? - PullRequest
0 голосов
/ 30 января 2009

Моим вдохновением для этого вопроса стало открытие очень раздражающего стиля по умолчанию (border-width: 0px;) в веб-элементе управления ImageButton. Простое решение - переопределить его, добавив свой собственный стиль в элемент управления, например, Style="border-width: 2px;".

Как бы то ни было, было бы неплохо просто создать простой адаптер элемента управления, который бы просто входил в нужное место и просто говорил элементу управления не отображать стили по умолчанию.

Посмотрев немного на код из проекта CSSFriendly ControlAdapter, кажется, что они воссоздают большую часть рендеринга, что излишне для того, что я хочу сделать - т.е. просто изменить стиль по умолчанию, который отображается. 1007 *

Итак, вопрос, как просто изменить рендеринг стилей по умолчанию через управляющие адаптеры и оставить все как есть?

Это вообще возможно?

Спасибо, Эгиль.

1 Ответ

4 голосов
/ 04 февраля 2009

Есть два способа сделать это. И то, и другое потребует написания собственного адаптера управления. Либо вы можете установить фактическое значение в коде, либо вы можете просто не включать значение вообще, а затем использовать 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...