Pregunta

En el siguiente código, le digo al ComboBox que use el DataTemplate llamado CustomerTemplate asignando su atributo ItemTemplate .

StackPanel , sin embargo, no tiene un atributo ItemTemplate.

¿Cómo puedo hacer que StackPanel también 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>
¿Fue útil?

Solución

ItemsControl es esencialmente un StackPanel con un ItemTemplate. Utiliza un StackPanel internamente.

Sin embargo, parece que está intentando mostrar un solo cliente en lugar de una lista de ellos (sueno como Clippy, ¿no?). En ese caso, desea utilizar un ContentControl:

<ContentControl 
    Content="{Binding SelectedCustomer}"
    ContentTemplate="{StaticResource CustomerTemplate}" />
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top