378 Stimmen

Wie man eine ListBox ItemTemplate horizontal die volle Breite der ListBox zu strecken?

Ich möchte, dass sich die ListItems mit ihrem orangefarbenen Hintergrund über die gesamte Breite der Listbox erstrecken.

Derzeit sind sie nur so breit wie der Vorname + Nachname.

Ich habe alle Elemente, die ich kann, eingestellt: HorizontalAlignment="Stretch".

Ich möchte den Hintergrund der ListboxItems zu erweitern, wie der Benutzer die Listbox streckt, so dass ich nicht in absolute Werte setzen möchten.

Was muss ich tun, damit die Hintergrundfarbe der ListBoxItems die Breite der ListBox ausfüllt?

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

677voto

Gabriel Mongeon Punkte 7141

Ich fand eine andere Lösung hier ...da ich auf beide Posts gestoßen bin...

Dies ist die Antwort von Myles:

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

Das hat bei mir funktioniert.

518voto

Matt Hamilton Punkte 193704

Ich bin mir sicher, dass dies ein Duplikat ist, aber ich kann keine Frage mit der gleichen Antwort finden.

hinzufügen HorizontalContentAlignment="Stretch" zu Ihrer ListBox. Damit sollte es klappen. Seien Sie nur vorsichtig mit der Autovervollständigung, denn es ist so einfach, die HorizontalAlignment aus Versehen.

81voto

Roman Starkov Punkte 55278

Wenn Ihre Artikel breiter als die ListBox helfen die anderen Antworten hier nicht weiter: die Artikel in der ItemTemplate bleiben breiter als die ListBox .

Die Lösung, die bei mir funktionierte, bestand darin, die horizontale Bildlaufleiste zu deaktivieren, was offenbar auch dazu führt, dass der Container all dieser Elemente nur so breit wie das Listenfeld bleibt.

Die kombinierte Lösung, um ListBox-Elemente zu erhalten, die so breit sind wie das Listenfeld, unabhängig davon, ob sie kleiner sind und gestreckt werden müssen, oder breiter sind und umbrochen werden müssen, ist daher wie folgt:

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

( Dank für die Idee mit der Bildlaufleiste )

0voto

Sangeetha Punkte 475

Da der Rahmen nur für das visuelle Erscheinungsbild verwendet wird, können Sie ihn in das ControlTemplate des ListBoxItem einfügen und die Eigenschaften dort ändern. Im ItemTemplate könnten Sie nur das StackPanel und den TextBlock unterbringen. Auf diese Weise bleibt der Code auch sauber, da das Aussehen des Steuerelements über das ControlTemplate und die anzuzeigenden Daten über das DataTemplate gesteuert werden.

0voto

Ivica Marincic Punkte 109

Die Lösung für mich war, die Eigenschaft HorizontalAlignment="Stretch" en ItemsPresenter innerhalb ScrollViewe r..

Hoffentlich hilft das jemandem...

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X