WPF 列表框项不会拉伸到最大宽度
本文关键字:列表 WPF | 更新日期: 2023-09-27 18:31:24
我是WPF的新手。我正在尝试使 OrderItemsTmpl 模板中的第一列拉伸到可用的最大宽度,但它不起作用,宽度仅达到内部文本的宽度。我不想使用绝对值。如何解决这个问题?谢谢
<DataTemplate x:Key="OrderItemsTmpl">
<Grid Background="Brown" HorizontalAlignment="Stretch" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" HorizontalAlignment="Stretch">
<CheckBox Content="{Binding Path=sItemName}" HorizontalContentAlignment="Stretch" ></CheckBox>
<ListBox HorizontalContentAlignment="Stretch"
ItemsSource="{Binding Path=aSinglOptns}"
Margin="20,0,0,0"
ItemTemplate="{StaticResource SinglOptnTmpl}"
Style="{StaticResource SheetListStyle}"
ItemContainerStyle="{StaticResource ListBoxItemStyle}"
>
</ListBox>
</StackPanel>
<TextBlock Grid.Column="1" Text="{Binding Path=fQty}"></TextBlock>
</DataTemplate>
<Style x:Key="ListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<ContentPresenter></ContentPresenter>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="SheetListStyle" TargetType="{x:Type ListBox}">
<Setter Property="Background" Value="Aqua"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBox}">
<Border
CornerRadius="8"
BorderThickness="2">
<ScrollViewer>
<WrapPanel
IsItemsHost="True"
Orientation="Vertical"
HorizontalAlignment="Left"/>
</ScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
包含项内容的列表框
<Grid Background="Pink" Grid.Row="1" >
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Center" Text="{Binding Path=sDita}" Grid.Row="0" Grid.Column="0" TextWrapping="Wrap" ></TextBlock>
<ListBox
Grid.Row="1"
Grid.Column="0"
HorizontalContentAlignment="Stretch"
Background="Aqua"
ItemsSource="{Binding Path=aOrderItems}"
Name="OrderItems"
ItemTemplate="{StaticResource OrderItemsTmpl}"
Margin="0,0,0,0"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.CanContentScroll="True"
ItemContainerStyle="{StaticResource ListBoxItemStyle}"
Style="{StaticResource SheetListStyle}">
</ListBox>
</Grid>
更新我意识到是因为<Style x:Key="SheetListStyle">
我正在使用WrapPanel,即使您应用水平对齐="拉伸",它也不会拉伸到最大宽度我必须改用其他面板,但有人知道可以使用什么吗?
大多数集合控件上都有一个属性,可以使整行可选,我怀疑您可能需要设置它。如果您尚未将 HorizontalContentAlignment
属性设置为 Stretch
,那么这就是您的问题。
啊......我刚刚注意到您确实设置了此属性。
好吧,让我们再试一次...我可以看到您在OrderItemsTmpl
DataTemplate
中使用了StackPanel
.这些控制对孩子的Width
没有任何影响,所以我认为这是你的问题。尝试将其更改为另一个Grid
控件。
请看这里
我确定这是一个重复的,但我找不到具有相同答案的问题。
将 HorizontalContentAlignment="Stretch" 添加到您的列表框中。这应该可以解决问题。
问题出在ListBox
的控件模板中。您正在使用WrapPanel
,并将其向左对齐。使用StackPanel
并允许其拉伸(默认值):
<ControlTemplate TargetType="{x:Type ListBox}">
<Border
CornerRadius="8"
BorderThickness="2">
<ScrollViewer>
<StackPanel
IsItemsHost="True"
Orientation="Vertical" />
</ScrollViewer>
</Border>
</ControlTemplate>
或者,您可以使用ItemsPresenter
控件而不是直接使用面板。 默认情况下,ListBox
使用一个VirtualizingStackPanel
,该也会为您提供虚拟化(已禁用)。