如何在Page.Theme
动态更改UserControl
?
据我所知,可以在Page_PreInit
中完成但UserControl
没有这样的事件,它只存在于Page类中。
答案 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);