首页 文章

ListBoxItem HorizontalContentAlignment在ListBox的整个宽度上拉伸

提问于
浏览
9

我在Windows Phone 8应用程序上遇到了_2927528的问题,同时试图让它们伸展到 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 HorizontalCOntentAlignment = "Stretch"并且它不起作用 . 我已经尝试了许多其他组合,似乎只将Border或Grid宽度设置为常量工作,另一个有效的解决方案是将Border宽度设置为绑定到包含ListBox的ActualWidth,但我想使用Stretch变种如果可以使它工作 .

1 回答

  • 24

    我在XAML遇到了同样的情况,它让我疯狂地想知道为什么我的 TextBlock 没有在整个宽度上完全着色 .

    使用竞争样式( this works for any of the xaml variants actually )的方法是明确定义 ListBoxItem 的样式以处理空间使用 .

    这给xaml一个提示,即以这种方式填充(拉伸)到屏幕区域:

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

    否则,xaml解析器默认尝试通过自动调整空间大小来节省空间 ListBoxItem 的内容;给它带来可怕的透明胶带外观 .

相关问题