asp:Label コントロールに基づいてカスタム複合コントロールを作成しています。ラベルのデフォルトのプロパティをスキン可能にし、コントロールに追加する追加のプロパティを設定できるようにしたいと考えています。
しかし、テーマ ディレクトリの Default.skin ファイルにスキン定義を追加し、SkinId を指定してコントロールをページに追加すると、Skinned プロパティでコントロールをレンダリングする方法がわかりません。
追加のポイント:
- 私のカスタム コントロールは、別のライブラリ/dll で定義されています。
- テスト プロパティを 1 つ追加し、[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 のページ タグに追加すると、Themeable 以外のプロパティを設定しようとするとエラーが発生するなど、スキンが機能します。
違いは何ですか?ベースページクラスのプロパティコードで動作させるにはどうすればよいですか?