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

默认情况下,ListViewItem 中的每个列的内容都是左对齐的。 通过提供 DataTemplate,然后设置 DataTemplate 中的元素上的 HorizontalAlignment 属性,可以更改每个列的对齐方式。 本主题演示默认情况下 ListView 如何对齐其内容,并且演示如何更改 ListView 中某个列的对齐方式。

示例

在下面的示例中,Title 和 ISBN 列中的数据左对齐。

<!--XmlDataProvider is defined in a ResourceDictionary, 
    such as Window.Resources-->
<XmlDataProvider x:Key="InventoryData" XPath="Books">
    <x:XData>
        <Books >
            <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 属性。 若要显示每个模板的 ISBN,DataTemplate 只能包含一个将其 HorizontalAlignment 属性设置为 RightTextBlock

下面的示例定义使 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>

请参见

任务

如何:使用 XMLDataProvider 和 XPath 查询绑定到 XML 数据

概念

数据绑定概述

数据模板化概述

ListView 概述