用户控制中的主题

时间:2011-04-26 10:09:30

标签: c# asp.net

如何在Page.Theme动态更改UserControl

据我所知,可以在Page_PreInit中完成但UserControl没有这样的事件,它只存在于Page类中。

2 个答案:

答案 0 :(得分:3)

MSDN says

  

您必须了解一个限制   使用theme属性时。该   主题属性只能在期间设置   或Page PreInit事件之前。

用户控件生命周期在页面的PreInit事件之后立即开始,因此您将无法直接从控件中设置主题。

但仍然有一些解决方法:假设当前主题存储在会话对象中,您可以在用户控件的任何位置更改此会话值,然后只刷新页面,例如使用Response.Redirect(Request.Url.AbsoluteUri)并更改Page_PreInit处理程序中的主题:

这是页面的PreInit事件处理程序:

protected void Page_PreInit(object sender, EventArgs e)
{
    var theme = Session["Theme"] as string;
    if (theme != null) 
    {
        Page.Theme = theme;
    }
}

和用户控件中的OnSelectedIndexChanged事件处理程序:

protected void ddlTheme_SelectedIndexChanged(object sender, EventArgs e)
{
    Session["Theme"] = ddlTheme.SelectedValue;
    Response.Redirect(Request.Url.AbsoluteUri);
}

答案 1 :(得分:0)

在用户控制加载事件上,使用:

this.ApplyStyleSheetSkin(Page);