2009-06-18 4 views
7

Im folgenden Code, sage ich der ComboBox, die DataTemplate namens CustomerTemplate durch Zuweisen seiner ItemTemplate Attribut zu verwenden.Wie kann ich StackPanel dazu bringen, ein ItemTemplate zu verwenden?

StackPanel hat jedoch kein ItemTemplate-Attribut.

Wie kann ich das StackPanel dazu bringen, auch CustomerTemplate zu verwenden?

<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> 

Antwort

36

ItemsControl ist im Wesentlichen ein Stackpanel mit einem ItemTemplate. Es verwendet intern ein StackPanel.

Es sieht jedoch so aus, als ob Sie versuchen, einen einzelnen Kunden anstatt einer Liste von ihnen anzuzeigen (ich höre wie Clippy, nicht wahr?). In diesem Fall möchten Sie ein Content verwenden:

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

perfekt, eine weitere nützliche Kontrolle aus der Versenkung gekrochen dank –

+9

Upvote für den Clippy Kommentar :) – Flater