如何获得一个ListBox ItemTemplate水平拉伸ListBox的全宽度?

我想有ListItems扩展与他们的橙色背景的Listbox的全宽。

目前它们的宽度只有姓+名。

我已经设置了每个元素,我可以:horizontalalign ="Stretch"。

我想让ListboxItems的背景随着用户拉伸Listbox而扩展,所以我不想放入绝对值。

我要做什么才能使ListBoxItems的背景色填充ListBox的宽度?

<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>
147250 次浏览

我确定这是一个重复的问题,但我找不到一个有相同答案的问题。

HorizontalContentAlignment="Stretch"添加到列表框中。这样应该可以了。只是要小心使用自动完成,因为很容易错误地获得HorizontalAlignment

我发现另一个解决方案,因为我遇到了两个帖子…

这是迈尔斯的回答:

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

这对我很管用。

如果你的项是更广泛的而不是ListBox,这里的其他答案将不起作用:ItemTemplate中的项仍然比ListBox宽。

对我来说有效的修复方法是禁用水平滚动条,这显然也告诉所有这些项的容器只保持与列表框一样宽。

因此,获得与列表框一样宽的ListBox项的组合修复,无论它们是更小且需要拉伸,还是更宽且需要包装,如下所示:

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

(滚动条的创意)

因为边框只是用于视觉外观,你可以把它放到ListBoxItem的ControlTemplate中,并在那里修改属性。在ItemTemplate中,你只能放置StackPanel和TextBlock。通过这种方式,代码也保持干净,因为控件的外观将通过ControlTemplate控制,要显示的数据将通过DataTemplate控制。

我的修复是在ScrollViewer内的ItemsPresenter上设置属性HorizontalAlignment="Stretch" ..

希望这能帮助到某人…

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

我也有同样的问题,作为一个快速的解决方案,我使用混合来确定有多少填充被添加。在我的例子中,它是12,所以我用一个负的边距来去掉它。现在所有东西都可以正确居中了