Como posso obter StackPanel para usar um ItemTemplate?
-
06-07-2019 - |
Pergunta
No código a seguir, digo-o ComboBox para usar o DataTemplate chamado CustomerTemplate atribuindo sua ItemTemplate atributo.
StackPanel , no entanto, não tem um atributo ItemTemplate.
Como posso obter o StackPanel para usar também 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>
Solução
ItemsControl é essencialmente um StackPanel com um ItemTemplate. Ele usa um StackPanel internamente.
No entanto, parece que você está tentando exibir um único cliente, em vez de uma lista deles (eu som como Clippy, não é?). Nesse caso, você quiser usar um ContentControl:
<ContentControl
Content="{Binding SelectedCustomer}"
ContentTemplate="{StaticResource CustomerTemplate}" />
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow