我有一个ListBox,它的ItemTemplate绑定到一个DataTemplate。我的问题是我不能得到模板中的元素拉伸到ListBox的全宽。
<ListBox x:Name="listPeople" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="0,0" Background="{x:Null}" SelectionMode="Extended" Grid.Row="1" ItemTemplate="{StaticResource Personviewmodel.browserDataTemplate}" ItemsSource="{Binding Mode=OneWay,Path=SearchResults}" > </ListBox> <DataTemplate x:Key="Personviewmodel.browserDataTemplate"> <ListBoxItem HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5,5,5"> <Border Opacity=".1" x:Name="itemBorder" Background="#FF000000" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" CornerRadius="5,5" MinWidth="100" Height="50"/> </Grid> </ListBoxItem> </DataTemplate>
正如你可以看到,我已经在网格中添加了一个边框,以指示模板的宽度。我的目标是看到这个边框扩展到列表框的全宽。目前它的宽度是由它的内容或MinWidth,这是唯一的东西,目前,保持它的所有可见。
解决方法
为ListBox创建数据模板时,不应包含< ListBoxItem> ;. DataTemplate的内容将放置在生成的容器内部。您可以使用ItemContainerStyle控制如何构造容器。 默认情况下,ListBoxItem的默认控件样式用于定义ItemContainerStyle。此样式将ListBoxItem.HorizontalContentAlignment属性设置为“Left”。注意ContentPresenter如何将其HorizontalAlignment绑定到此属性。 您需要重写绑定到ListBox时生成的ListBoxItem容器的样式。这可以通过设置ItemContainerStyle来完成。将HorizontalContentAlignment属性设置为“Stretch”。 下面是默认的ListBoxItem Style。包括参考。
<Style x:Key="ListBoxItemStyle1" targettype="ListBoxItem"> <Setter Property="Padding" Value="3"/> <Setter Property="HorizontalContentAlignment" Value="Left"/> <Setter Property="VerticalContentAlignment" Value="Top"/> <Setter Property="Background" Value="Transparent"/> <Setter Property="BorderThickness" Value="1"/> <Setter Property="TabNavigation" Value="Local"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate targettype="ListBoxItem"> <Grid Background="{TemplateBinding Background}"> <!-- VSM excluded for readability --> <Rectangle x:Name="fillColor" Fill="#FFBADDE9" RadiusX="1" RadiusY="1" IsHitTestVisible="False" Opacity="0"/> <Rectangle x:Name="fillColor2" Fill="#FFBADDE9" RadiusX="1" RadiusY="1" IsHitTestVisible="False" Opacity="0"/> <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}"/> <Rectangle x:Name="FocusVisualElement" stroke="#FF6DBDD1" strokeThickness="1" RadiusX="1" RadiusY="1" Visibility="Collapsed"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。