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

Lui*_*uis 5 c# asp.net skinning

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

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

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

<asp:TextBox
    runat="server"
    SkinId = "MySkin"
    Width="400"
/>
Run Code Online (Sandbox Code Playgroud)

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

Dbu*_*ggy 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);
}
Run Code Online (Sandbox Code Playgroud)


Lui*_*uis 0

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

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