创建ASP.NET复合控件。如何应用与SkinID相关的属性?

时间:2009-09-28 17:35:59

标签: asp.net custom-controls skinning skin composite-controls

我正在创建一个基于asp:Label控件的自定义复合控件。我希望能够将标签的默认属性设置为可换肤,以及我添加到控件中的其他属性。

但是当我在主题目录中的Default.skin文件中添加外观定义,并将控件添加到指定了SkinId的页面时,我无法弄清楚如何使用Skinned属性来呈现控件。 / p>

补充要点:

  • 我的自定义控件在单独的库/ dll中定义。
  • 我添加了一个测试属性,并添加了[Themeable(false)]属性。然后我在.skin文件中设置该属性。当我尝试查看页面时,我没有收到任何错误,所以在我看来,.skin文件没有得到应用,或者皮肤文件中的控件def无法与控件def匹配aspx页面。

来自皮肤文件:

<ctrl:ExtendedLabel SkinId="test" runat="server"
 Expandable="true" Lookup="true" Required="true"
 RequiredCssClass="required" Text="Hello" />

来自aspx页面:

<ctrl:ExtendedLabel SkinID="test" runat="server"/>

来自web.config:

<pages>
  <controls>
     <add tagPrefix="ctrl" namespace="MyCompany.WebControls"
          assembly="MyCompany.Web" />
  </controls>
</pages>

我在控件中添加了一个test属性,将其标记为[Themeable(false)],以便测试在skin文件中设置该属性时是否会出现运行时错误。没错。

请注意,pages标签没有styleSheetTheme属性。但是,我有一个覆盖StyleSheetTheme属性的Base页面类,它似乎适用于其他所有内容。

如果我将styleSheetTheme属性添加到web.config中的pages标签,那么外观就会起作用,包括如果我尝试设置非Themeable属性时会收到错误。

有什么区别?如何使用Base页面类属性代码?

1 个答案:

答案 0 :(得分:2)

尝试这个时你会得到什么?我刚刚创建了一个简单的测试项目,并且能够在Web自定义控件上设置自定义属性。我的步骤是:

  • 创建自定义控件。
  • 将[Themeable(true)]属性添加到代码隐藏文件中的类定义中。
  • 将Label控件添加到我的自定义控件。
  • 将一个名为“LabelText”的属性添加到我的自定义控件中,该控件获取/设置标签控件Text值。
  • 在web.config中,将'theme =“TestTheme”'添加到system.web / pages部分。
  • 在web.config中,添加'&lt; add tagPrefix =“mine”tagName =“Test”src =“〜/ UI / Test.ascx”/&gt;'到system.web / pages / controls部分。
  • 在我的Default.skin文件中,添加了'&lt; mine:Test runat =“server”LabelText =“Test Text”/&gt;
  • 在Default.aspx中,添加了'&lt; mine:Test id =“test1”runat =“server”/&gt;'

加载页面并查看“测试文本”文本,该文本仅出现在皮肤文件中。

希望我上面的一个步骤将是您忘记的内容,但如果没有,请更新您的问题,详细说明您正在尝试的内容以及您所看到的内容。