1

我正在创建一个基于 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 标记,皮肤的东西就会起作用,包括如果我尝试设置非主题属性时会出现错误。

有什么不同?如何让它与基本页面类属性代码一起使用?

4

1 回答 1

2

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

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

加载页面并查看仅存在于皮肤文件中的文本“测试文本”。

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

于 2009-09-28T18:18:24.673 回答