ListBox使用UniformGrid时,项目未居中

8

我有一个使用UniformGrid作为ItemsPanelTemplate的列表框。这是一组照片。我希望照片在每个单元格的水平中心处居中,但无论我做什么,图像似乎都靠左对齐了。以下是我的当前XAML:

<Border BorderThickness="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" DockPanel.Dock="Right">
    <ListBox Name="PhotosListBox" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid IsItemsHost="True" HorizontalAlignment="Center"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Image Source="{Binding Path=photo}" HorizontalAlignment="Center"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Border>

如您所见,我在DataTemplate中的Image控件设置了HorizontalAlignment="Center",本以为可以实现居中,但似乎没有生效。

我做错了什么?

1个回答

12
您需要设置 HorizontalContentAlignmentStretch,以允许 ListBoxItems 拉伸到所有可用空间,从而使内联控件可以相应地居中对齐。
<ListBox>
   <ListBox.ItemContainerStyle>
      <Style TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
      </Style>
   </ListBox.ItemContainerStyle>
   ...
</ListBox>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接