我在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
HorizontalCOntentAlignment =“Stretch”,但它不起作用。我已经尝试了许多其他组合,似乎只将Border或Grid宽度设置为常量工作,另一个有效的解决方案是将Border宽度设置为绑定到包含ListBox的ActualWidth,但我想使用Stretch变种如果可以使其发挥作用。
答案 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
的内容来节省空间。给它带来可怕的透明胶带外观。