【问题标题】:Creating ASP.NET composite control. How to apply properties associated with SkinID?创建 ASP.NET 复合控件。如何应用与 SkinID 关联的属性?
【发布时间】:2009-09-28 17:35:58
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 浏览上述所有步骤后,我发现我的测试页没有从基页类继承。嗬!多么尴尬。感谢克里斯的清单
    猜你喜欢
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多