2009-06-18 9 views
7

En el siguiente código, le digo al ComboBox que use DataTemplate denominado CustomerTemplate asignando su atributo ItemTemplate.¿Cómo puedo hacer que StackPanel use una 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> 

Respuesta

36

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

Sin embargo, parece que estás tratando de mostrar un solo cliente en lugar de una lista de ellos (me parece a Clippy, ¿no?). En ese caso se desea utilizar un ContentControl:

<ContentControl 
    Content="{Binding SelectedCustomer}" 
    ContentTemplate="{StaticResource CustomerTemplate}" /> 
+1

perfecta, otro control útil salió de la nada, gracias –

+9

Upvote por el comentario :) Clippy – Flater

Cuestiones relacionadas