How can I get StackPanel to use an ItemTemplate?
Asked Answered
K

1

14

In the following code, I tell the ComboBox to use the DataTemplate called CustomerTemplate by assigning its ItemTemplate attribute.

StackPanel, however, doesn't have an ItemTemplate attribute.

How can I get the StackPanel to also use CustomerTemplate?

<Window.Resources>
    <DataTemplate x:Key="CustomerTemplate">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding FirstName}"/>
            <TextBlock Text=" "/>
            <TextBlock Text="{Binding LastName}"/>
        </StackPanel>
    </DataTemplate>
</Window.Resources>

<DockPanel LastChildFill="False" Margin="10">
    <ComboBox 
        x:Name="CustomerList"
        ItemTemplate="{StaticResource CustomerTemplate}"
        HorizontalAlignment="Left"
        DockPanel.Dock="Top" 
        Width="200"
        SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"
        ItemsSource="{Binding Customers}"/>

    <StackPanel DataContext="{Binding SelectedCustomer}" Orientation="Horizontal">
        <TextBlock Text="Chosen: "/>
        <TextBlock Text="{Binding LastName}"/>
    </StackPanel>

</DockPanel>
Kathykathye answered 18/6, 2009 at 10:8 Comment(0)
F
53

ItemsControl is essentially a StackPanel with an ItemTemplate. It uses a StackPanel internally.

However, it looks like you're trying to display a single customer rather than a list of them (I sound like Clippy, don't I?). In that case you want to use a ContentControl:

<ContentControl 
    Content="{Binding SelectedCustomer}"
    ContentTemplate="{StaticResource CustomerTemplate}" />
Fortaleza answered 18/6, 2009 at 10:28 Comment(2)
perfect, another useful control crawled out of the woodwork, thanksKathykathye
"It looks like you're trying to write an upvote-worthy answer"Disrespect

© 2022 - 2024 — McMap. All rights reserved.