17 Stimmen

Rasterbreite innerhalb einer Listbox ausfüllen

Ich habe ein Raster als die Datenvorlage für Elemente in einer Listbox und es ist nicht die gesamte Breite des Steuerelements zu füllen. Ich habe versucht, die Vorschläge in den anderen Fragen, aber sie sind nicht arbeiten:

Dies ist die listbox xaml

 <ListBox ItemsSource="{Binding AccessControl.Credentials}" >                      
                                <ListBox.ItemTemplate>
                            <DataTemplate>
                                    <Grid >
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="*"/>
                                            <ColumnDefinition Width="*"/>
                                            <ColumnDefinition Width="*"/>
                                            <ColumnDefinition Width="*"/>
                                            <ColumnDefinition Width="Auto"/>
                                        </Grid.ColumnDefinitions>
                                        <Grid.RowDefinitions>
                                            <RowDefinition/>
                                            <RowDefinition/>
                                            <RowDefinition/>
                                        </Grid.RowDefinitions>

                                        <Label Grid.Column="0" Grid.Row="0">Name</Label>
                                        <Label Grid.Column="0" Grid.Row="1">Attribute</Label>
                                        <Label Grid.Column="2" Grid.Row="1">Value</Label>   </Grid>
                            </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

und ich verwende eine Themendatei aus dem folgenden Projekt: http://wpfthemes.codeplex.com/ Hier ist der relevante Teil:

 <Style TargetType="{x:Type ListBox}">
    <Setter Property="SnapsToDevicePixels" Value="true" />
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
    <Setter Property="ScrollViewer.CanContentScroll" Value="True" />
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="FontFamily" Value="Trebuchet MS" />
    <Setter Property="FontSize" Value="12" />
    <Setter Property="BorderBrush" Value="{DynamicResource ControlBorderBrush}" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="Padding" Value="1" />
    <Setter Property="IsTabStop" Value="False" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBox}">
                <Grid>
                    <Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="1" Background="{DynamicResource ControlBackgroundBrush}">
                        <ScrollViewer Margin="1" Focusable="false" Foreground="{TemplateBinding Foreground}">

                            <StackPanel Margin="2" IsItemsHost="true" />

                        </ScrollViewer>
                    </Border>
                    <Border x:Name="DisabledVisualElement" IsHitTestVisible="false" Background="#A5FFFFFF" BorderBrush="#66FFFFFF" BorderThickness="1" Opacity="0" />
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Opacity" TargetName="DisabledVisualElement" Value="1" />
                    </Trigger>
                    <Trigger Property="IsGrouping" Value="true">
                        <Setter Property="ScrollViewer.CanContentScroll" Value="false" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Habe ich etwas verpasst?

29voto

H.B. Punkte 140726

Sie müssen die ListBoxItems ihren Inhalt strecken, entweder durch Änderung der entsprechenden Eigenschaft auf der ListBox :

<ListBox HorizontalContentAlignment="Stretch" ...>

...oder indem Sie es auf den Artikeln über die ItemContainerStyle :

<ListBox.ItemContainerStyle>
    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    </Style>
</ListBox.ItemContainerStyle>

Standardmäßig funktionieren beide als die ListBoxItem Der Standardstil bindet die HorizontalContentAlignment Eigentum an den Besitzern ListBox's Eigentum.

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