Search code examples
wpfstylesdatatemplateitemscontrolhierarchicaldatatemplate

WPF: HierarchicalDataTemplate ItemsPanel


I have a ``TreeViewwhich uses a customItemsPanelto show the first level of items in aStackPanel, but I need to show subitems in aStackPaneltoo. The problem is, the second level of items are shown in aWrapPanel, and asHierarchicalDataTemplatedoesn't have anItemsPanel` property I'm not sure how to do this. This is my xaml:

<TreeView x:Name="treGlobalCards">
    <TreeView.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel IsItemsHost="True" Orientation="{Binding Orientation,RelativeSource={x:Static RelativeSource.TemplatedParent}}"
                        MaxWidth="{Binding ActualWidth,RelativeSource={RelativeSource AncestorType={x:Type ScrollContentPresenter}}}"/>
        </ItemsPanelTemplate>
    </TreeView.ItemsPanel>
    <TreeView.ItemTemplate>
    <HierarchicalDataTemplate x:Key="CardTypeTemplate" ItemsSource="{Binding Cards}">
        <TextBlock Text="{Binding Path=CardType}"/>
    </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

Solution

  • Create a new DataTemplate that uses a StackPanel and set the HierachicalDataTemplate's "ItemTemplate" to that new DataTemplate.

    i.e.

    
    <DataTemplate x:Key="someTemp">
        <StackPanel />
    </DataTemplate>
    
    <HierarchicalDataTemplate x:Key="hierTemp" ItemSource="{Binding}" ItemTemplate="{StaticResource someTemp}" />