345 votes

Comment obtenir un ItemTemplate ListBox pour étirer horizontalement toute la largeur de la ListBox?

Je veux avoir le ListItems d'étendre avec leur arrière-plan orange la totalité de la largeur de la zone de liste.

Actuellement, ils sont aussi large que le Prénom + Nom de famille.

J'ai mis tous les éléments que je peux pour: HorizontalAlignment="Stretch".

Je veux que le fond de la ListboxItems de croître à mesure que l'utilisateur s'étend la zone de liste donc je ne veux pas mettre en valeur absolue.

Que dois-je faire pour que la couleur de fond de la ListBoxItems remplir la largeur de la zone de liste?

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

640voto

Gabriel Mongeon Points 3521

J'ai trouvé une autre solution ici , puisque je suis tombé sur les deux messages ...

C'est de la réponse de Myles:

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

Cela a fonctionné pour moi.

444voto

Matt Hamilton Points 98268

Je suis sûr que c'est un doublon, mais je ne peux pas trouver une question avec la même réponse.

Ajoutez HorizontalContentAlignment="Stretch" à votre ListBox. Cela devrait faire l'affaire.

68voto

romkyns Points 17295

Si vos articles sont plus large que l' ListBox, les autres réponses ici n'aide pas: les éléments de l' ItemTemplate rester plus large que l' ListBox.

Le correctif qui a fonctionné pour moi a été de désactiver la barre de défilement horizontale, qui, apparemment, dit aussi le réceptacle de tous ces éléments pour rester aussi large que la zone de liste.

D'où le correctif combiné pour obtenir la zone de liste des éléments qui sont aussi larges que la zone de liste, si elles sont plus petites et ont besoin d'étirement, ou plus large et ont besoin de l'emballage, est comme suit:

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

(les crédits de la barre de défilement idée)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X