Специальные стили в WebControl - PullRequest
1 голос
/ 27 июня 2011

Я создаю WebControl, который используется на нескольких моих страницах ASP.NET. В одном случае я хотел бы добавить некоторые специальные атрибуты стиля, такие как Width и Float.

Поскольку я не могу предвидеть, какие атрибуты понадобятся в будущем, я бы хотел, чтобы разметка, использующая элемент управления, могла добавить любой случайный стиль. У меня есть элемент управления, поэтому он поддерживает стандартные стили, такие как Color, Width и т. Д., Но не Float.

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

Я попытался просто добавить style="..." в разметку, но это просто удалено и не отображается нигде в визуализированном элементе управления.

Ответы [ 3 ]

1 голос
/ 28 июня 2011

Мой предыдущий ответ относится к пользовательским элементам управления, моя ошибка!

Для WebControl вы можете переопределить метод AddAttributesToRender.

Кажется, что следующее работает довольно хорошо:

    [Bindable(true)]
    [Category("Appearance")]
    [DefaultValue("")]
    [Localizable(true)]
    public string style
    {
        get
        {
            String s = (String)ViewState["style"];
            return ((s == null) ? String.Empty : s);
        }

        set
        {
            ViewState["style"] = value;
        }
    }

    protected override void AddAttributesToRender(HtmlTextWriter writer)
    {            

        base.AddAttributesToRender(writer);
        if(!string.IsNullOrEmpty(style))
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Style, style);
        }

    }

РЕДАКТИРОВАТЬ: Изменено публичное свойство на "style", чтобы использовать преимущества intellisence.

0 голосов
/ 27 июня 2011

Возможно, это не то, что вы ищете, но если у вас есть окружающий элемент, вы можете применить стили в виде строки согласно следующему:

.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="HubbInvestor.WebUserControl1" %>
<div style="<%=AdHocStyle%>">
    Some Text:
    <asp:Button ID="Button1" runat="server" Text="A Button" />
</div>

.ascx.cs

public partial class WebUserControl1 : System.Web.UI.UserControl
{
    private string adHocStyle = string.Empty;

    public string AdHocStyle
    {
        get { return adHocStyle; }
        set { adHocStyle = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {

    }
}

конечно, вы не получите никакого хорошего интеллигентного завершения стилей

0 голосов
/ 27 июня 2011

Я бы добавил свойство CssClass в ваш WebControl. Это позволит любой странице, которая использует ваш элемент управления, предоставить свой собственный внешний вид.

...