Como obter um ListBox ItemTemplate ao estiramento na horizontal a toda a largura da caixa de listagem?

StackOverflow https://stackoverflow.com/questions/838828

  •  22-07-2019
  •  | 
  •  

Pergunta

Eu quero ter os ListItems para estender com a sua laranja, fundo a toda a largura da caixa de listagem.

Atualmente eles são apenas tão grande como o FirstName + LastName.

Eu configurei todos os elementos que puder para:. HorizontalAlignment = "Stretch"

Eu quero o fundo das ListBoxItems para expandir como o usuário se estende a caixa de listagem para que eu não quero colocar em valores absolutos.

O que eu tenho que fazer para que a cor das ListBoxItems fundo preencher a largura da caixa de listagem?

<Window x:Class="TestListBoxSelectedItemStyle.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:TestListBoxSelectedItemStyle"
    Title="Window1" Height="300" Width="300">

    <Window.Resources>
        <local:CustomerViewModel x:Key="TheDataProvider"/>

        <DataTemplate x:Key="CustomerItemTemplate">
            <Border CornerRadius="5" Background="Orange" HorizontalAlignment="Stretch" Padding="5" Margin="3">
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" Width="Auto">
                    <TextBlock HorizontalAlignment="Stretch">
                    <TextBlock.Text>
                        <MultiBinding StringFormat="{}{0} {1}">
                            <Binding Path="FirstName"/>
                            <Binding Path="LastName"/>
                        </MultiBinding>
                    </TextBlock.Text>
                    </TextBlock>
                </StackPanel>
            </Border>
        </DataTemplate>

    </Window.Resources>

    <Grid>
        <ListBox ItemsSource="{Binding Path=GetAllCustomers, Source={StaticResource TheDataProvider}}"
                 ItemTemplate="{StaticResource CustomerItemTemplate}"/>
    </Grid>
</Window>
Foi útil?

Solução

Eu tenho certeza que este é um duplicado, mas não consigo encontrar uma pergunta com a mesma resposta.

Adicionar HorizontalContentAlignment="Stretch" à sua listagem. Isso deve fazer o truque. Basta ter cuidado com auto-complete, porque é tão fácil de obter HorizontalAlignment por engano.

Outras dicas

outra solução aqui , desde que eu corri para ambos post ...

Esta é a partir da resposta Myles:

<ListBox.ItemContainerStyle> 
    <Style TargetType="ListBoxItem"> 
        <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> 
    </Style> 
</ListBox.ItemContainerStyle> 

Isso funcionou para mim.

Se os itens são mais amplo que o ListBox, as outras respostas aqui não vai ajudar:. Itens da ItemTemplate permanecem mais largo que o ListBox

A correção que funcionou para mim foi desativar a barra de rolagem horizontal, que, aparentemente, também informa o recipiente de todos esses itens para permanecer apenas tão grande como a caixa de lista.

Assim, a correção combinado para obter itens de caixa de listagem que são tão ampla como a caixa de lista, se eles são menores e necessidade de alongamento, ou mais amplo e necessidade de embrulho, é a seguinte:

<ListBox HorizontalContentAlignment="Stretch" 
         ScrollViewer.HorizontalScrollBarVisibility="Disabled">

créditos para a barra de rolagem ideia )

Uma vez que a fronteira é usado apenas para a aparência visual, você pode colocá-lo em ControlTemplate do ListBoxItem e modificar as propriedades lá. No ItemTemplate, você pode colocar apenas o StackPanel eo TextBlock. Desta maneira, o código também permanece limpa, tal como no aspecto do controlo irá ser controlado por meio do ControlTemplate e os dados a serem exibidos serão controlados através do DataTemplate.

A correção para mim foi conjunto HorizontalAlignment="Stretch" propriedade em ItemsPresenter dentro ScrollViewer ..

Espero que isso ajude alguém ...

<Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBox">
                    <ScrollViewer x:Name="ScrollViewer" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Foreground="{TemplateBinding Foreground}" Padding="{TemplateBinding Padding}" HorizontalAlignment="Stretch">
                        <ItemsPresenter  Height="252" HorizontalAlignment="Stretch"/>
                    </ScrollViewer>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

Eu também tive o mesmo problema, como uma solução rápida, eu usei mistura para determinar quanto cobertura estava sendo adicionado. No meu caso, tinha 12 anos, então eu usei uma margem negativa para se livrar dele. Agora tudo pode agora ser centrado corretamente

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top