Usando StackPanel como ContentControl (WPF)
-
06-09-2019 - |
Pergunta
Então, eu tenho um StackPanel que estou usando como um ContentControl. Eu tenho um lugar onde eu quero botões para ser gerados com base em dados que estou ligando, e isso é tudo bom trabalho, mas eu quero os botões para ser colocado para fora horizontalmente, não verticalmente, como é que está acontecendo atualmente. Aqui está uma imagem:
E aqui está o código da minha descrição ContentTemplate:
<StackPanel Name="wpReleaseButtons" Orientation="Horizontal" Grid.Row="2">
<ItemsControl IsTabStop="False" ItemsSource="{Binding Path=BranchCommands}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Tag="{Binding}" Padding="3">
<TextBlock Text="{Binding Path=DisplayValue}" />
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
Não sei o que estou fazendo de errado aqui. Qualquer informação seria muito apreciada. Obrigado!
Solução
Eu diria que parece que o ItemsControl
é o que está exibindo os botões na vertical. se você quiser que os botões no ItemsControl
ser horizontal, então você precisa do StackPanel
estar no ItemsControl
ItemsPanelTemplate
, não o contrário, como o que você tem no seu código:
<ItemsControl IsTabStop="False" ItemsSource="{Binding Path=BranchCommands}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Tag="{Binding}" Padding="3">
<TextBlock Text="{Binding Path=DisplayValue}" />
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Eu poderia ser um pouco errado na bit ItemsControl.ItemsPanel
como eu não tenho quaisquer dados para testá-lo com ...
Editar: Além da referência Bea, há algumas coisas boas por Dr WPF .
Outras dicas
Eu não consigo ver sua imagem (é bloqueada pelo firewall da minha empresa), mas aqui vou eu de qualquer maneira ...
Seu 'Orientação = 'horizontal'' provavelmente está funcionando como deveria: ele contém apenas um elemento filho, um ItemsControl. Em vez disso, tente fazer um ControlTemplate para o seu ItemsControl, onde o ControlTemplate contém um StackPanel com Orientation = "horizontal".
Espero que isso ajude!
Editar:
Mais uma vez, Bea vem através de uma resposta / example!