如何让ListBox ItemTemplate水平拉伸ListBox的整个宽度?

Edw*_*uay 342 xaml listboxitem

我希望ListItems以其橙色背景扩展为Listbox的整个宽度.

目前它们只与FirstName + LastName一样宽.

我已将每个元素设置为:Horizo​​ntalAlignment ="Stretch".

我希望ListboxItems的背景随着用户拉伸列表框而扩展,因此我不想输入绝对值.

我需要做什么才能使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>
Run Code Online (Sandbox Code Playgroud)

Gab*_*eon 640

我在这里找到了另一个解决方案,因为我遇到了两个帖子......

这是来自Myles的回答:

<ListBox.ItemContainerStyle> 
    <Style TargetType="ListBoxItem"> 
        <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> 
    </Style> 
</ListBox.ItemContainerStyle> 
Run Code Online (Sandbox Code Playgroud)

这对我有用.


Mat*_*ton 438

我确定这是重复的,但我找不到同样答案的问题.

添加HorizontalContentAlignment="Stretch"到ListBox.这应该够了吧.只需要小心自动完成,因为它很容易HorizontalAlignment被误解.

  • 如果您有自定义ListBox项,这实际上不起作用. (120认同)
  • 实际上这个解决方案由于某些原因在Silverlight中不起作用.另一方面,加布里埃尔的解决方案确实如此 (10认同)
  • 加布里埃尔一个更好,它适用于所有情况:) (10认同)
  • 这不适用于WinRT ListView控件.我已经尝试过了. (6认同)
  • 这在自定义列表(Windows,而不是Silverlight)上工作正常,在编写xaml时要小心自动完成.如果你写"Horiz ..",你将得到"Horizo​​ntalAlignment"而不是"Horizo​​ntalContentAlignment".选择第一个建议非常容易,因为两者都使用"Stretch". (2认同)

Rom*_*kov 68

如果你的物品比那些物品ListBox,那么这里的其他答案将无济于事:物品中的物品ItemTemplate仍然宽于ListBox.

对我有用的修复是禁用水平滚动条,显然,它还告诉容器所有这些项目只保留与列表框一样宽.

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

<ListBox HorizontalContentAlignment="Stretch" 
         ScrollViewer.HorizontalScrollBarVisibility="Disabled">
Run Code Online (Sandbox Code Playgroud)

(滚动条创意的学分)