为什么ListBoxItems没有获得所有可用空间?

时间:2013-05-11 12:17:13

标签: .net wpf layout listbox windows-phone-8

举个简单的例子:

    <Grid>
    <ListBox>
        <ListBox.ItemTemplate>
            <DataTemplate  >
                <Grid HorizontalAlignment="Stretch">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="0.5*" />
                        <ColumnDefinition Width="0.5*" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="FIRST TEXT" />
                    <TextBlock Grid.Column="1" Text="SECOND TEXT"  />
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
        a
        a
    </ListBox>
</Grid>

据我所知,这应该在应用程序屏幕的左半部分显示第一个文本,在右半部分显示第二个文本。

而不是这两个文本是一个接一个。好像网格认为所有可用空间都是文本使用的空间。也许我需要在Listbox面板上更改一些内容?

编辑:我试过这个:

    <Style TargetType="ListBoxItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Grid>
                        <ContentPresenter HorizontalAlignment="Stretch" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

即使它工作,它也打破了listboxitem的选定功能:(

顺便说一下,我正在使用Windows pone 8

1 个答案:

答案 0 :(得分:3)

使用HorizontalContentAlignment="Stretch"应用于ListBox。请参阅下面列出的解决方案注意:为方便起见,我添加了单独的Background="AntiqueWhite"Background="Aqua",因此您可以看到两个TextBlock的实际大小。

<Grid>
    <ListBox HorizontalContentAlignment="Stretch">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid HorizontalAlignment="Stretch">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="0.5*" />
                        <ColumnDefinition Width="0.5*" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="FIRST TEXT" Background="AntiqueWhite"/>
                    <TextBlock Grid.Column="1" Text="SECOND TEXT"  Background="Aqua"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
        a
        a
    </ListBox>
</Grid>