SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Infragistics NetAdvantageチュートリアル(AD)

Silverlightでのツリー表示(その2): 標準TreeViewコントロールとNetAdvantage XamDataTreeコントロール - UI カスタマイズ編

  • このエントリーをはてなブックマークに追加

複数コンテンツを保持するコントロールのカスタマイズ

 前回ご説明した通り、TreeViewコントロールは複数コンテンツを取り扱うItemsControlの派生クラスになります。

 ItemsControlも先ほどのコントロール同様、Templateプロパティがあります。もちろん、先ほどと同様ControlTemplateを設定することでコントロールの表示方法をカスタマイズできます。

 そして、ItemsControlのTemplateには複数コントロールを取り扱うためのPresenterコントロール、ItemsPresenterコントロールが設定されています。

 ItemsPresenterは複数あるコンテンツを表示するため、先ほどのButtonのようなContentControlの派生クラスの役割に加えて、ItemsControlの持つプロパティを利用して複数コンテンツを取り扱うための方法の設定が行うことが可能です。

 そこで、ItemsControlはこういったカスタマイズするために4つの主要なプロパティが用意されています。

 これらがItemContainerGenerator・ItemContainerStyle・ItemTemplate・ItemsPanelという4つのプロパティになります。

 それぞれ、順を追ってご説明しましょう。

ItemContainerGenerator

 まず、ItemsControlは複数ある個々のオブジェクトを表示するために、オブジェクト表示用のコントロールの生成を行います。

 この生成にはコントロールを生成する役割を持つGeneratorオブジェクトを指定するItemContainerGeneratorプロパティを持ちます。

 ItemContainerGeneratorプロパティには、その名前のとおり個々のコンテンツを表示するためのコントロールの生成を行うItemContainerGeneratorクラスのオブジェクトを設定することができます。

 ItemsControlはItemsやItemsSourceに設定されたコレクションのオブジェクトの数だけ、このGeneratorオブジェクトを使用してコントロールを生成します。

 当然、生成されるコントロールの種類はItemsControlの種類ごとに内容が異なります。

 今回の本題であるTreeViewコントロールにはTreeViewItemコントロールが生成されるGeneratorが設定されています。

 つまり、TreeViewコントロールの中で表示されている明細を表示しているコントロールはTreeViewItemコントロールになります。

 TreeViewItemコントロールはHeaderedItemsControl、つまりヘッダー付の複数コンテンツを取り扱うことができるコントロールとなっています。

ItemContainerStyle

 ItemsControlはItemContainerGeneratorで生成されたコントロールを利用して表示を行います。そして、このGeneratorで生成されたコントロールを対象にしたStyleオブジェクトを指定することができるプロパティがこちらのItemContainerStyleプロパティになります。

 TreeViewコントロールではTreeViewItemコントロールに対して適用するStyleが設定されています。

ItemTemplate

 先ほどご紹介したItemContainerStyleにはGeneratorで生成されたコントロールに適用するControlTemplateも定義されています。特に指定がない場合、個々のコントロールにはこのTemplate設定に基づき表示されますが、これとは別に個々のコントロールに対してのテンプレートの定義を行うことができるのがItemTemplateになります。

 ItemControlはItemTemplateに定義されたTemplateがあった場合、ItemContainerStyleに定義されているTemplate設定を上書きします。

 そのため、ItemTemplateの設定が存在した場合はそれが優先されてTemplateとして適用されることになります。

ItemsPanel

 複数コントロールを取り扱う際に、個々のコントロールが決定しても、それらの表示をどのように行うかというレイアウトの問題が発生します。

 このような複数のオブジェクトのレイアウトはItemsPanelに設定されているPanelコントロールにより挙動が決まります。

 ItemsPanelプロパティにはItemsPanelTemplateを指定できます。

 ItemsPanelTemplateはItemsControlのレイアウト用に利用するパネルコントロールを指定するためのTemplateで、Panelコントロールを指定することができます。

 TreeViewコントロールには表示用のパネルとして既定ではStackPanelが設定されていますので、垂直方向へ積み重ねるように表示されています。

TreeViewコントロールのカスタマイズ

 TreeViewコントロールにはItemsControlの持つこのようなプロパティを保持していますが、先ほどご説明した通り、TreeViewコントロールは表示のためにHeaderedItemsControlの派生クラスであるTreeViewItemコントロールを利用しています。

 ヘッダー付き複数コンテンツを取り扱うコントロールを利用し、それらのコントロールを再帰的に呼び出すことで階層構造となるデータの表示が行われています。

 つまり、通常のItemsControlに比べると、階層構造を表現するために新たなHeaderedItemsControlを自動生成するという形になっています。

 そのため、そういった階層構造で生成されたコントロールに対して適用するTemplateプロパティとしてHierarchicalDataTemplateプロパティが用意されています。

次のページ
DataTemplate

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Infragistics NetAdvantageチュートリアル連載記事一覧

もっと読む

この記事の著者

森 博之(AZPower株式会社)(モリ ヒロユキ)

 Microsoft Azure、.NETテクノロジーを使用したWebサービスのプロダクトアーキテクト。他にも技術記事の執筆やトレーニング、セミナースピーカーを行っている。 Microsoft MVPをDeveloper Technologies、Visual Studio and Development Technologies、Windows Development、Client App Dev、.NET、Silverlight、Visual C#などのコン...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5869 2011/04/14 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング