1

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 以外のプロパティを設定しようとするとエラーが発生するなど、スキンが機能します。

違いは何ですか?ベースページクラスのプロパティコードで動作させるにはどうすればよいですか?

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" />」を追加

ページを読み込むと、スキン ファイルにのみ存在するテキスト「Test Text」が表示されます。

上記の私の手順の 1 つが忘れられていることを願っていますが、そうでない場合は、何をしようとしているのか、何を見ているのかについての詳細で質問を更新してください。

于 2009-09-28T18:18:24.673 に答える