ASP.NET複合コントロールの作成。SkinID に関連付けられたプロパティを適用するにはどうすればよいですか?
-
18-09-2019 - |
質問
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)] としてマークしました。エラーはありません。
ページ タグには styleSheetTheme 属性がないことに注意してください。ただし、StyleSheetTheme プロパティをオーバーライドする Base ページ クラスがあり、他のすべてで機能するようです。
web.config のページ タグに styleSheetTheme 属性を追加すると、テーマ非対応プロパティを設定しようとするとエラーが発生するなど、スキンの機能は機能します。
違いは何ですか?Base ページ クラスのプロパティ コードで動作させるにはどうすればよいですか?
解決
これを試してみると何が得られますか?単純なテスト プロジェクトを作成し、Web カスタム コントロールのカスタム プロパティをスキンすることができました。私の手順は次のとおりです。
- カスタム コントロールを作成します。
- [Themeable(true)] 属性を分離コード ファイルのクラス定義に追加します。
- Label コントロールをカスタム コントロールに追加します。
- 「LabelText」という名前のプロパティをカスタム コントロールに追加します。これにより、ラベル コントロールのテキスト値が取得/設定されます。
- web.config で、system.web/pages セクションに「theme="TestTheme"」を追加します。
- 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" />」を追加しました
ページをロードすると、「Test Text」というテキストが表示されます。これはスキン ファイルにのみ存在していました。
上記の手順の 1 つがあなたが忘れているものであることを願っていますが、そうでない場合は、試している内容と表示されている内容の詳細を記載して質問を更新してください。