2009-09-28 40 views
1

我正在創建一個基於asp:Label控件的自定義複合控件。我希望能夠將標籤的默認屬性設置爲可剝皮的,以及添加到我的控件中的其他屬性。創建ASP.NET複合控件。如何應用與SkinID相關的屬性?

但是,當我添加一個皮膚定義到我的主題目錄中的Default.skin文件中,並將控件添加到指定的SkinId到我的頁面時,我無法弄清楚如何讓控件使用Skinned屬性進行渲染。

附加點:

  • 我的定製控制是在一個單獨的庫/ 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> 

我添加了一個試驗性質的控制,將其標記爲[Themeable(false)],以便測試在何時出現運行時錯誤在皮膚文件中設置該屬性。沒有錯誤。

請注意,頁面標記沒有styleSheetTheme屬性。然而,我確實有一個覆蓋StyleSheetTheme屬性的Base頁面類,它似乎適用於其他所有內容。

如果我將styleSheetTheme屬性添加到web.config中的頁面標記中,則皮膚內容可以正常工作,包括在嘗試設置非非Themeable屬性時收到錯誤。

有什麼區別?我怎樣才能使它與基頁面類的屬性代碼一起工作?

回答

2

當您嘗試此操作時,您會得到什麼?我剛創建了一個簡單的測試項目,並能夠在Web自定義控件上定製屬性。我的步驟如下:

  • 創建自定義控件。
  • 將[Themeable(true)]屬性添加到代碼隱藏文件中的類定義中。
  • 將Label控件添加到我的自定義控件中。
  • 將名爲「LabelText」的屬性添加到我的自定義控件中,該控件獲取/設置標籤控件Text值。
  • 在web.config中,將'theme =「TestTheme」'添加到system.web/pages部分。
  • 在web.config中,向system.web/pages/controls部分添加'< add tagPrefix =「mine」tagName =「Test」src =「〜/ UI/Test.ascx」/>'。
  • 在我的默認。添加'< mine:Test runat =「server」LabelText =「Test Text」/>
  • In Default.aspx,added'< mine:Test id =「test1」runat =「server」/>'

加載頁面並查看僅存在於Skin文件中的文本「測試文本」。

希望我上面的步驟之一會被忘記,但如果沒有,請更新您的問題,並詳細說明您正在嘗試以及看到的內容。

+0

通過上述所有步驟,我發現我的測試頁不是從基本頁類繼承的。衛生署!多麼尷尬。感謝Chris的核對清單 – slolife 2009-09-28 20:33:59

相關問題