在列表框中填充网格宽度
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有用。以上是关于在列表框中填充网格宽度的主要内容,如果未能解决你的问题,请参考以下文章