如何获得一个列表框ItemTemplate伸展水平的整个宽度的列表框?
-
22-07-2019 - |
题
我想有ListItems延长他们的橙色背景的全宽度的列表框。
目前它们仅仅作为广泛的FirstName+LastName。
我已经设置的每一个元素,我可以:HorizontalAlignment="拉伸"。
我想背景的ListboxItems扩大的用户伸展的列表框所以我不想要放在绝对值。
我有什么要做这样的背景色ListBoxItems填补宽度的列表框?
<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>
解决方案
我敢肯定这是一种重复,但是我不能找到一个问题有相同的答案。
添加 HorizontalContentAlignment="Stretch"
你的列表框。这应该做的把戏。只要小心的自动完成的,因为它是那么容易得到 HorizontalAlignment
通过的错误。
其他提示
我找到了 另一个解决方案在这里, 自从我遇到了两个后...
这是迈尔斯的回答:
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
</Style>
</ListBox.ItemContainerStyle>
这为我工作。
如果你的项目 更广泛 比 ListBox
, ,其他的答案在这里不会有帮助:该项目在 ItemTemplate
保持比较宽 ListBox
.
修复工作对我来说是禁用的滚动水平,这显然还告诉容器的所有这些项目保留只能作为广泛,因为列表框。
因此,合并的解决要得到列表框项目是广泛的列表框,无论他们是较小的和需要伸展,或更广泛和需要包装,如下:
<ListBox HorizontalContentAlignment="Stretch"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
因为边界只用于视觉的外观,你可以把它放到ListBoxItem的控件和修改的性质。在ItemTemplate,你可以的地方只有在这种情况下,并文本块.在这样,该法还保持清洁,如在外的控制将通过控制控件和数据所示,将通过控制的数据模板.
该修正是我设置的财产 HorizontalAlignment="Stretch"
上 ItemsPresenter
内部 ScrollViewe
r..
希望这可以帮助别人...
<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个,因此我用了一个负保证金,以摆脱它。现在的一切,现在可以集中正确