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

问题描述 投票:5回答:3

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

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页面中声明控件它可以正常工作,但如果我尝试以编程方式执行它不起作用。

c# asp.net skinning
3个回答
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
投票

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.