Wie ein ListBox ItemTemplate bekommen horizontal über die gesamte Breite der List-Box zu strecken?

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

  •  22-07-2019
  •  | 
  •  

Frage

Ich mag die Listitem haben, mit ihrem orangefarbenen Hintergrund die volle Breite der Listbox zu verlängern.

Zur Zeit sind sie nur so breit wie der Vorname + Name.

ich jedes Element eingestellt habe ich kann. Horizontal = "Stretch"

Ich möchte den Hintergrund der ListBoxItems zu erweitern, wie der Benutzer die Listbox erstreckt, so will ich nicht in absoluten Werten setzen.

Was muss ich tun muss, so dass die Hintergrundfarbe der ListBoxItems die Breite des ListBox füllen?

<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>
War es hilfreich?

Lösung

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

In HorizontalContentAlignment="Stretch" auf Ihre List-Box. Das sollte den Trick tun. Nur vorsichtig sein, mit Auto-Vervollständigung, weil es so einfach ist HorizontalAlignment versehentlich zu erhalten.

Andere Tipps

Ich fand hier , da ich in beiden Pfosten lief ...

Dies ist aus der Myles Antwort:

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

Das funktioniert für mich.

Wenn Sie Ihre Artikel sind breite als die ListBox, hier die anderen Antworten wird nicht helfen. Die Elemente in den ItemTemplate bleiben breiter als die ListBox

Das Update, das für mich gearbeitet wurde die horizontale Scrollbar zu deaktivieren, die offenbar auch die Behälter aller dieser Elemente sagt nur so breit wie das Listenfeld bleiben.

Daraus ergibt sich die kombinierte fix ListBox Elemente zu erhalten, die so breit wie das Listenfeld sind, ob sie kleiner sind und müssen Strecken oder breiter und Verpackung benötigen, ist wie folgt:

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

( Kredite für die Bildlaufleiste Idee )

Da die Grenze nur für die visuelle Erscheinung verwendet wird, können Sie es in die ListBoxItem des Control setzen konnte und die Eigenschaften dort ändern. In der ItemTemplate, konnte man nur die Stackpanel und den Textblock platzieren. Auf diese Weise bleibt der Code auch sauber, wie sie in der Erscheinung der Steuerung wird über das Control und die Daten gesteuert werden über den Datatemplate gesteuert werden gezeigt werden.

Das Update war für mich Eigentum HorizontalAlignment="Stretch" auf ItemsPresenter innen ScrollViewer ..

einstellen

Hope this jemand hilft ...

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

Ich hatte auch das gleiche Problem, wie eine schnelle Abhilfe, habe ich Mischung zu bestimmen, wie viel Polsterung hinzugefügt wurde. In meinem Fall war es 12, so habe ich eine negative Marge von um es loszuwerden. Nun jetzt alles richtig zentriert werden kann

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top