これが役立つかどうかはわかりませんが、独自のテンプレート セレクターを指定して、タイプごとに異なるテンプレートを選択することができます。それらはすべて、選択した ItemsPanelTemplate オブジェクトによってカプセル化されますが、指定したタイプに対して非常に異なるコントロールを持つことができます。これは私の使用例ですが、同じアイデアを TreeView に適用できると思います
<ItemsControl>
<ItemsControl.Resources>
<DataTemplate x:Key="templateFoo">
</DataTemplate>
<DataTemplate x:Key="templateBar">
</DataTemplate>
<DataTemplate x:Key="templateJoe">
</DataTemplate>
</ItemsControl.Resources>
<ItemsControl.ItemTemplateSelector>
<local:MyTemplateSelector></local:MyTemplateSelector>
</ItemsControl.ItemTemplateSelector>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Row"
Value="{Binding Row}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
そして、これはどこかで
public class MyTemplateSelector: DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element == null || item == null)
return null;
if(item is Foo)
{
return element.FindResource("templateFoo") as DataTemplate;
}
if (item is Bar)
{
return element.FindResource("templateBar") as DataTemplate;
}
if (item is Joe)
{
return element.FindResource("templateJeo") as DataTemplate;
}
return null;
}
}