如何获得一个列表框ItemTemplate伸展水平的整个宽度的列表框?

StackOverflow https://stackoverflow.com/questions/838828

  •  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 内部 ScrollViewer..

希望这可以帮助别人...

<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个,因此我用了一个负保证金,以摆脱它。现在的一切,现在可以集中正确

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top