将外观应用于以编程方式创建的控件

时间:2010-05-13 07:48:32

标签: c# asp.net skinning

我正在这样的页面的代码隐藏中创建一个文本框:

protected override void OnInit(EventArgs e)
{  
      base.OnInit(e);
      TextBox test = new TextBox();
      test.SkinkId = "MySkin";
      placeHolder.Controls.Add(test);
} 

在我的皮肤文件中我有这个:

<asp:TextBox
    runat="server"
    SkinId = "MySkin"
    Width="400"
/>

为什么皮肤没有应用于控件。如果我在我的aspx页面中声明控件它可以正常工作,但如果我尝试以编程方式执行它不起作用。

3 个答案:

答案 0 :(得分:6)

我知道这是一个老线程。但我想在类似的情况下分享我必须做的事情。帮助我的是在创建控件后使用ApplyStyleSheetSkin(this)。

protected override void OnInit(EventArgs e)
{  
    base.OnInit(e);

    TextBox test = new TextBox();
    test.SkinkId = "MySkin";
    test.ApplyStyleSheetSkin(this); // <--
    placeHolder.Controls.Add(test);
}

答案 1 :(得分:1)

如果将代码放在OnPreInit事件中会有帮助吗?您可能需要稍后将其添加到占位符,但您可以在那里创建控件。

答案 2 :(得分:0)

答案在这里: https://connect.microsoft.com/VisualStudio/feedback/details/558947/apply-skin-to-a-control-created-programatically

“ASP.NET主题系统对何时可以设置不同的主题信息有限制。可以在PreInit期间设置Theme属性。但是StyleSheetTheme在编译时处理,因此无法在PreInit等事件中以编程方式覆盖。” / p>