ListBoxItem Horizo​​ntalContentAlignment =拉伸不起作用

ral*_*len 1 silverlight listbox datatemplate stretch listboxitem

我无法将列表框项目扩展到整个列表框宽度.

下面是我的列表框的xaml

<ListBox x:Name="MyListBox"
                 VerticalAlignment="Stretch"
                 HorizontalAlignment="Stretch"
                 HorizontalContentAlignment = "Stretch"
                 Margin="0,10,0,0"
                 ItemsSource="{Binding Path=Users}"
                 ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                 Grid.Column="0"
                 Grid.ColumnSpan="1"
                 Grid.Row="1"
                 Grid.RowSpan="3">                      
        <ListBox.ItemTemplate>
            <DataTemplate>
                <local:MyListBoxTemplate/>
            </DataTemplate>
        </ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

我已尝试在其他帖子上找到以下建议,但他们没有为我工作:

  • 将ListBox的Horizo​​ntalContentAlignment设置为Stretch
  • 覆盖listboxitem的样式,即listbox xaml中ItemContainerStyle标签内的新样式(注意:我正在使用大都会导航主题)
  • 编辑CoreStyles.xaml中的DefaultListBoxItemStyle样式以包含Horizo​​ntalContentAlignmemt

是因为我正在为我的数据模板使用单独的xaml文件吗?或者我的数据模板有问题?有没有人对我还能尝试什么有任何建议?

我看到某处或许我可以将ListBoxItem Width绑定到ListBox的实际宽度?

我是新手,所以如果我错过了一些非常简单/明显的东西,我会提前道歉!

以下是我的数据模板:

<Grid x:Name="LayoutRoot" HorizontalAlignment="Stretch" ShowGridLines="True" Height="20">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="10*" />
        <ColumnDefinition Width="30*" />
        <ColumnDefinition Width="300*" />
        <ColumnDefinition Width="50*" />
        <ColumnDefinition Width="10*" />
    </Grid.ColumnDefinitions>
    <Image x:Name="TwitterImageIcon"
           Grid.Column="1" 
           Grid.ColumnSpan="1" 
           Source="{Binding Path=imageUrl}"
          />
    <StackPanel Orientation="Horizontal" Grid.Column="2" Grid.ColumnSpan="1" HorizontalAlignment="Stretch" >

        <TextBlock x:Name="TwitterUsernameTextBlock"
                   Text="{Binding Path=username,StringFormat='@\{0\}  '}"/>
        <TextBlock x:Name="TwitterFullNameTextBlock"
               Text="{Binding Path=fullname}"/>
    </StackPanel>


        <Button x:Name="InfoButton"
            Content="Info" 
            Grid.Column="3" 
            HorizontalAlignment="Stretch" 
            VerticalAlignment="Stretch"/>
        <Border x:Name="StyleBorder" />
    </Grid>
Run Code Online (Sandbox Code Playgroud)

任何建议都非常感谢.

提前致谢.

更新:忘记在添加时提及:

    <ListBox...>
        <ListBox.Resources>
            <Style TargetType="ListBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ListBox.Resources>
    </ListBox>
Run Code Online (Sandbox Code Playgroud)

然而它的工作会影响国际大都会的主题,因此当悬停在选中时和选择时,列表框项目的高亮显示与世界主题其他主题的风格不同.

Leo*_*Leo 8

在列表框中试试这个:

<ListBox...>
    <ListBox.Resources>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListBox.Resources>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

EDIT1 (抱歉我的英文不好)

ListBoxItem在CoreStyles.xaml上找到样式(寻找x:Key="DefaultListBoxItemStyle").在该样式中,找到名为ContentControl x:Name="contentControl"并添加HorizontalContentAlignment属性,更改后代码如下所示:

<ContentControl x:Name="contentControl" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" >
    <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" VerticalAlignment="Center"  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="7"/>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)

现在你可以删除Listbox.Resources我在第一个答案中显示的内容...如果你不希望这个行为出现在你的所有listBox中,你可以复制这个样式并给它一个不同的键.