Silverlight 3:ListBox DataTemplate Horizo​​ntalAlignment

我有一个ListBox,它的ItemTemplate绑定到一个DataTemplate。我的问题是我不能得到模板中的元素拉伸到ListBox的全宽。

<ListBox x:Name="listPeople" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 
    Margin="0,0,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,5">
       <Border Opacity=".1" x:Name="itemBorder"  Background="#FF000000"   
         HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
         CornerRadius="5,5,5,5" MinWidth="100" Height="50"/>
      </Grid>
   </ListBoxItem>
</DataTemplate>

正如你可以看到,我已经在网格中添加了一个边框,以指示模板的宽度。我的目标是看到这个边框扩展到列表框的全宽。目前它的宽度是由它的内容或MinWidth,这是唯一的东西,目前,保持它的所有可见。

最佳答案
为ListBox创建数据模板时,不应包含< ListBoxItem&gt ;. DataTemplate的内容将放置在生成的容器内部。您可以使用ItemContainerStyle控制如何构造容器。 默认情况下,ListBoxItem的默认控件样式用于定义ItemContainerStyle。此样式将ListBoxItem.Horizo​​ntalContentAlignment属性设置为“Left”。注意ContentPresenter如何将其Horizo​​ntalAlignment绑定到此属性。 您需要重写绑定到ListBox时生成的ListBoxItem容器的样式。这可以通过设置ItemContainerStyle来完成。将Horizo​​ntalContentAlignment属性设置为“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>

转载注明原文:Silverlight 3:ListBox DataTemplate Horizo​​ntalAlignment - 代码日志