Как я могу заставить StackPanel использовать ItemTemplate?

StackOverflow https://stackoverflow.com/questions/1011899

Вопрос

В следующем коде я говорю ComboBox использовать DataTemplate с именем CustomerTemplate, назначая его атрибут ItemTemplate .

StackPanel , однако, не имеет атрибута ItemTemplate.

Как я могу заставить StackPanel также использовать 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>
Это было полезно?

Решение

ItemsControl по сути является StackPanel с ItemTemplate. Он использует StackPanel внутри.

Тем не менее, похоже, что вы пытаетесь отобразить одного клиента, а не его список (я звучу как Clippy, не так ли?). В этом случае вы хотите использовать ContentControl:

<ContentControl 
    Content="{Binding SelectedCustomer}"
    ContentTemplate="{StaticResource CustomerTemplate}" />
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top