在列表框中填充网格宽度

Posted

技术标签:

【中文标题】在列表框中填充网格宽度【英文标题】:Fill Grid width inside a listbox 【发布时间】:2011-09-05 12:18:20 【问题描述】:

我有一个网格作为列表框中项目的数据模板,它没有填充控件的整个宽度。我已经尝试了其他问题中的建议,但它们不起作用:

这是列表框 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>

我正在使用来自以下项目的主题文件:http://wpfthemes.codeplex.com/ 这是相关部分:

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

我错过了什么吗?

【问题讨论】:

【参考方案1】:

您需要通过更改ListBox 上的相应属性来使ListBoxItems 拉伸其内容:

<ListBox HorizontalContentAlignment="Stretch" ...>

...或通过ItemContainerStyle 将其设置在项目上:

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

默认情况下,两者都将起作用,因为ListBoxItem 默认样式将HorizontalContentAlignment 属性绑定到所属的ListBox's 属性。

【讨论】:

+1 所以我在一个小时结束时发现这个关于如何在 ListBox 中获得一个网格来填充空间,沿着网格共享大小和星大小的兔子洞到 no有用。

以上是关于在列表框中填充网格宽度的主要内容,如果未能解决你的问题,请参考以下文章

如何从列表框中填充文本框?

从列表框中选择,从另一个列表框中选择填充

如何在vfp中的选定组合框中填充列表框?

如何从由 SQL 查询填充的列表框中获取信息?

列表框中的 ListBoxItem 未完全拉伸到屏幕宽度

从文本框中使用 jquery mobile 填充下拉列表