如何:更改 ListView 中列的水平对齐方式

默认情况下,ListViewItem 中每列的内容均为左对齐。 你可以通过以下方法更改每列的对齐方式:提供一个 DataTemplate,并在 DataTemplate 内的元素上设置 HorizontalAlignment 属性。 本主题演示 ListView 默认的内容对齐方式以及更改 ListView 中某一列的对齐方式的方法。

示例

在以下示例中,TitleISBN 列中的数据均为左对齐。

<!--XmlDataProvider is defined in a ResourceDictionary, 
    such as Window.Resources-->
<XmlDataProvider x:Key="InventoryData" XPath="Books">
    <x:XData>
        <Books xmlns="">
            <Book ISBN="0-7356-0562-9" Stock="in" Number="9">
                <Title>XML in Action</Title>
                <Summary>XML Web Technology</Summary>
            </Book>
            <Book ISBN="0-7356-1370-2" Stock="in" Number="8">
                <Title>Programming Microsoft Windows With C#</Title>
                <Summary>C# Programming using the .NET Framework</Summary>
            </Book>
            <Book ISBN="0-7356-1288-9" Stock="out" Number="7">
                <Title>Inside C#</Title>
                <Summary>C# Language Programming</Summary>
            </Book>
            <Book ISBN="0-7356-1377-X" Stock="in" Number="5">
                <Title>Introducing Microsoft .NET</Title>
                <Summary>Overview of .NET Technology</Summary>
            </Book>
            <Book ISBN="0-7356-1448-2" Stock="out" Number="4">
                <Title>Microsoft C# Language Specifications</Title>
                <Summary>The C# language definition</Summary>
            </Book>
        </Books>
    </x:XData>
</XmlDataProvider>
<ListView ItemsSource="{Binding Source={StaticResource InventoryData}, XPath=Book}">
    <ListView.View>
        <GridView>
            <GridViewColumn Width="300" Header="Title" 
                            DisplayMemberBinding="{Binding XPath=Title}"/>
            <GridViewColumn Width="150" Header="ISBN" 
                            DisplayMemberBinding="{Binding XPath=@ISBN}"/>
        </GridView>
    </ListView.View>
</ListView>

若要更改 ISBN 列的对齐方式,你需要将每个 ListViewItemHorizontalContentAlignment 属性指定为 Stretch,这样每个 ListViewItem 中的元素可跨各列的整个宽度分布。 ListView 绑定到数据源,因此你需要创建设置 HorizontalContentAlignment 的样式。 接下来,需要使用 DataTemplate 来显示内容,而不是使用 DisplayMemberBinding 属性。 若要显示每个模板的 ISBNDataTemplate 只能包含一个 TextBlock(它将 HorizontalAlignment 属性设置为 Right)。

以下示例定义使 ISBN 列右对齐所必需的样式和 DataTemplate,并将 GridViewColumn 更改为引用 DataTemplate

<!--The Style and DataTemplate are defined in a ResourceDictionary, 
    such as Window.Resources-->
<Style TargetType="ListViewItem">
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>

<DataTemplate x:Key="ISBNTemplate">
    <TextBlock HorizontalAlignment="Right" 
               Text="{Binding XPath=@ISBN}"/>
</DataTemplate>
<ListView ItemsSource="{Binding Source={StaticResource InventoryData}, XPath=Book}">
    <ListView.View>
        <GridView>
            <GridViewColumn Width="300" Header="Title" 
                            DisplayMemberBinding="{Binding XPath=Title}"/>
            <GridViewColumn Width="150" Header="ISBN" 
                            CellTemplate="{StaticResource ISBNTemplate}"/>
        </GridView>
    </ListView.View>
</ListView>

另请参阅