4

一連の矢印ボタンを生成するユーザーコントロールがあります。各ボタンにカスタムユーザーコントロールを表示させたい。カスタムの矢印ボタンのナビゲーションコントロールは、レンダリングすると次のようになります。

完了したら、ボタンをクリックすると、矢印の下にユーザーコントロールが表示されます。各矢印ボタンは、そのボタンに固有の固有の機能を含むカスタムユーザーコントロールに関連付ける必要があります。現在、ユーザーコントロールに単純なList<ArrowTab> Tabs { get; set; }プロパティがあり、ユーザーコントロールをホストしているページのpage_loadに、次のようにプログラムでいくつかのサンプルタブ(上記を参照)を追加します。

            TabWizard1.Tabs = new List<ArrowTab>
            {
                new ArrowTab
                {
                    Text = "Project Settings",
                    Selected = true
                },
                new ArrowTab { Text = "Groups" },
                new ArrowTab { Text = "Products" },
                new ArrowTab { Text = "Make Assignments" },
                new ArrowTab { Text = "Review Assignments" },
                new ArrowTab { Text = "Commitments" }
            };

これは、コードビハインドからボタンを追加するために機能しますが、実際に必要なのは、ページのユーザーコントロールのマークアップにボタンを追加し、別のカスタムユーザーコントロールをそのボタンに関連付けることです。たとえば、私は次のようなことをしたいと思います。

    <uc:TabWizard ID="TabWizard1" runat="server">
        <items>
            <arrowTab Text="Project Settings">
                <uc:ProjectSettingsControl ID="projectSettings1" runat="server" />
            </arrowTab>
            <arrowTab Text="Groups">
                <uc:GroupsControl ID="groups1" runat="server" />
            </arrowTab>
            <arrowTab Text="Products">
                <uc:ProductsControl ID="products1" runat="server" />
            </arrowTab>
            <arrowTab Text="Make Assignments">
                <uc:MakeAssignmentsControl ID="makeAssignments1" runat="server" />
            </arrowTab>
            <arrowTab Text="Review Assignments">
                <uc:ReviewAssignmentsControl ID="reviewAssignments1" runat="server" />
            </arrowTab>
            <arrowTab Text="Commitments">
                <uc:CommitmentsControl ID="commitments1" runat="server" />
            </arrowTab>
        </items>
    </uc:TabWizard>

すでに似たようなことをしている人の例は、TelerikRadPanelコントロールです。

<telerik:RadPanelItem Text="Mail" ImageUrl="Img/mail.gif" Expanded="True">
    <Items>
        <telerik:RadPanelItem ImageUrl="Img/mailPersonalFolders.gif" Text="Personal Folders" />
        <telerik:RadPanelItem ImageUrl="Img/mailDeletedItems.gif" Text="Deleted Items" />
        <telerik:RadPanelItem ImageUrl="Img/mailInbox.gif" Text="Inbox" />
        <telerik:RadPanelItem ImageUrl="Img/mailFolder.gif" Text="My Mail" />
        <telerik:RadPanelItem ImageUrl="Img/mailSent.gif" Text="Sent Items" />
        <telerik:RadPanelItem ImageUrl="Img/mailOutbox.gif" Text="Outbox" />
        <telerik:RadPanelItem ImageUrl="Img/mailSearch.gif" Text="Search Folders" />
    </Items>
</telerik:RadPanelItem>

この動作を可能にするユーザーコントロールを作成する方法がわかりません。正しい方向に少しだけ動かすだけでも有益です。

4

2 に答える 2

3

リチャードが提供したリンクはあなたを正しい方向に向けるべきですが、あなたの質問のいくつかに答えるために:

子要素を許可するにはどうすればよいですか?

PersistenceModeプロパティをandDesignerSieralizationVisibility属性でマークすることにより、サーバーコントロールが子要素をサポートするようにすることができます。あなたの場合、このプロパティは、以下の例のように、要素のコレクションになります。

    /// <summary>
    /// Gets the columns collection.
    /// </summary>
    [Browsable(true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    [PersistenceMode(PersistenceMode.InnerProperty)]
    public GridColumnCollection Columns
    {
        get
        {
            if (columnsCollection == null)
            {
                if (columnsArrayList == null)
                {
                    this.EnsureChildControls();
                    if (columnsArrayList == null)
                        columnsArrayList = new ArrayList();
                }
                columnsCollection = new GridColumnCollection(columnsArrayList);
            }
            return columnsCollection;
        }
    }

ページロードのユーザーコントロールでこれらの要素を反復処理するにはどうすればよいですか?

子要素コレクションはプロパティにマップされ、コレクションを反復処理して要素をコントロールに追加できます。

foreach (GridColumn dataColumn in columnsCollection)
{
    var cell = new GridCell(dataColumn.HeaderStyle, dataColumn.HeaderText);
    item.Cells.Add(cell);
}

子アイテムもユーザーコントロールである必要がありますか?

いいえ、子アイテムは他のサーバーコントロールになります。itemsプロパティは、サーバーコントロールのコレクションにマップされます。サーバーコントロールは、この場合はArrowTabコントロールです。

そして最後に、子アイテムが独自のユーザーコントロールである必要がある場合、それらのコントロールには何らかのContentTemplateのものが必要ですか?

はい、サーバーコントロールにITemplateインターフェイスを実装する必要があります。ArrowTabリチャードが提供したリンクは、これを行う方法を説明する必要があります。

于 2012-05-09T15:52:27.780 に答える
2

あなたが求めているのは、テンプレート化されたカスタムASP.NETサーバーコントロールの構築だと思います。

于 2012-05-09T15:15:36.163 に答える