ListBoxItem Horizo​​ntalContentAlignment在ListBox的整个宽度上拉伸

时间:2013-05-17 19:09:14

标签: xaml windows-phone-8 listbox alignment listboxitem

我在Windows Phone 8应用上遇到了ListBoxItem的问题,同时试图让它们在ListBox的所有宽度上展开。

我的ListBox

<ListBox 
      ItemsSource="{Binding Events}" 
      behaviors:ItemClickCommandBehavior.Command="{Binding EventSelectedCommand}"
      ItemTemplate="{StaticResource EventListTemplateSelector}"/>

其DataTemplates位于一个单独的xaml资源文件中:

<DataTemplate x:Key="EventListHeaderTemplate">
    <Border HorizontalAlignment="Stretch">
        <Grid Height="50">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="6*"/>
            </Grid.ColumnDefinitions>
            <Image Grid.Column="0" Source="{Binding ImageUri}" VerticalAlignment="Center" HorizontalAlignment="Center" Height="30"/>
            <TextBlock Grid.Column="1" Text="{Binding SomeText}" VerticalAlignment="Center" HorizontalAlignment="Left" Foreground="Black"/>
        </Grid>
    </Border>
</DataTemplate>

我无法让这些物品真正拉伸,我不知道问题出在哪里。我试图设置ItemContainerStyle Horizo​​ntalCOntentAlignment =“Stretch”,但它不起作用。我已经尝试了许多其他组合,似乎只将Border或Grid宽度设置为常量工作,另一个有效的解决方案是将Border宽度设置为绑定到包含ListBox的ActualWidth,但我想使用Stretch变种如果可以使其发挥作用。

1 个答案:

答案 0 :(得分:24)

我在XAML中碰到了同样的事情,这让我疯狂地想知道为什么我的TextBlock没有在整个宽度上完全着色。

使用竞争样式(适用于任何xaml变体实际)的方法是明确定义ListBoxItem的样式以处理空间使用。

这为xaml提供了一个提示,即以这种方式填充( stretch )到屏幕区域:

    <ListBox Name="lbTest" HorizontalContentAlignment="Stretch"  >

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

        <ListBox.ItemTemplate>...</ListBox.ItemTemplate>

否则,xaml解析器默认情况下会尝试通过 auto 将其大小调整为ListBoxItem的内容来节省空间。给它带来可怕的透明胶带外观。