WPFのControlTemplateとDataTemplateの備忘録

データを表現するコントロール2種
  • ContentControl: 単一の内容(Content)を表現するコントロール。(例)Button Label TabItem etc.
  • ItemsControl:コレクション(Items、ItemsSource)を表現するコントロール。(例)ListBox
コントロール自体(表現する内容(ContentやItems)の外側)の見た目を自作したい場合
  • Control.Templateに自作したControlTemplateをセットする。
ContentControlのContent(つまりContentPresenterの内側)の見た目を自作したい場合
  • ContentControl.ContentTemplateに自作したDataTemplateをセットする。
ItemsControlのItems(つまりIsItemsHost=Trueであるパネルの内側)の各要素の見た目を自作したい場合
  • ItemsControl.ItemTemplateに自作したDataTemplateをセットする。これはListBoxに対するListBoxItemのような子要素のContentTemplateにセットするのと同じ。
  • 複数のDataTemplateを使い分けたいならItemTemplateSelectorを使う。
自作とまでは言わずスタイルを適用したいだけの場合
  • コントロール自体(表現する内容(ContentやItems)の外側)なら普通にStyleにセットする。
  • ItemsControlのItems1つ1つに適用する場合はItemsControl.ItemsContainerStyleにセットする。
  • 複数のスタイルを使い分けたいならItemsControl.ItemsContainerStyleSelectorを使う。
ちゃんとリファレンスに目を通す

Control.Template Property (System.Windows.Controls) | Microsoft Docs
DataTemplate Class (System.Windows) | Microsoft Docs
ControlTemplate Class (System.Windows.Controls) | Microsoft Docs
ContentControl.ContentTemplate Property (System.Windows.Controls) | Microsoft Docs
ItemsControl.ItemTemplate Property (System.Windows.Controls) | Microsoft Docs