我正在创建一个基于 asp:Label 控件的自定义复合控件。我希望能够让标签的默认属性以及我添加到我的控件的其他属性是可换肤的。
但是,当我将皮肤定义添加到我的主题目录中的 Default.skin 文件,并将控件添加到指定 SkinId 的页面时,我无法弄清楚如何让控件使用 Skinned 属性呈现。
附加点:
- 我的自定义控件在单独的库/dll 中定义。
- 我添加了一个测试属性,并添加了 [Themeable(false)] 属性。然后我在 .skin 文件中设置该属性。当我尝试查看页面时没有收到任何错误,因此在我看来 .skin 文件没有被应用,或者皮肤文件中的控件定义与.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>
我向控件添加了一个测试属性,将其标记为 [Themeable(false)] 以测试在皮肤文件中设置该属性时是否会出现运行时错误。没有错误。
注意 pages 标签没有 styleSheetTheme 属性。但是,我确实有一个覆盖 StyleSheetTheme 属性的基本页面类,这似乎适用于其他所有内容。
如果我将 styleSheetTheme 属性添加到 web.config 中的 pages 标记,皮肤的东西就会起作用,包括如果我尝试设置非主题属性时会出现错误。
有什么不同?如何让它与基本页面类属性代码一起使用?