WebControl中的Ad Hoc样式

时间:2011-06-27 06:06:11

标签: asp.net web-controls

我正在创建一个在我的几个ASP.NET页面中使用的WebControl。在一个实例中,我想添加一些特殊样式属性,例如WidthFloat

由于我无法预测将来需要哪些属性,我希望使用该控件的标记能够添加任何随机样式。我有控件,所以它支持ColorWidth等标准样式,但不支持Float

有没有办法允许在标记中指定这些属性并让它们传播到渲染的控件不变?我不想创建自己的自定义Float属性以及可能需要的任何其他可能的样式。

我尝试在标记中添加style="...",但这只是被删除,并且不会出现在渲染控件中的任何位置。

3 个答案:

答案 0 :(得分:1)

我以前的回答属于用户控制,我的错误!

对于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);
        }

    }

编辑:将公共财产更改为“风格”以利用智慧。

答案 1 :(得分:0)

我会在WebControl中添加一个CssClass属性。这将允许使用您的控件的任何页面提供自己的外观。

答案 2 :(得分:0)

它可能不是你想要的,但如果你有一个周围的元素,你可以按照以下方式将样式应用为字符串:

的.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)
    {

    }
}

当然你没有在样式

上获得任何好的intellisense完成