10

ListBoxItem在 Windows Phone 8 应用程序上的 's 有问题,同时试图让它们跨越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>

我无法让这些物品真正伸展,我不知道问题出在哪里。我试图设置ItemContainerStyleHorizo​​ntalCONtentAlignment="Stretch" 但它没有用。我已经尝试了许多其他组合,似乎只有将边框或网格宽度设置为一个常量才有效,而另一种可行的解决方案是将边框宽度设置为绑定到包含 ListBox 的 ActualWidth,但我想使用 Stretch变体如果可以使它工作。

4

1 回答 1

27

我在 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 解析器会尝试通过将其大小自动调整为ListBoxItem;的内容来节省空间。给它那种可怕的透明胶带外观。

于 2013-06-06T15:57:52.403 回答