不同列和项目的不同对齐方式

different alignments for different columns and items

有一个 WPF 应用程序。

它使用列表视图控件。

我有 3 列。 我希望第一列 header 左对齐 我希望其他 2 个居中对齐 我想要其中一个项目右对齐(只是为了让我知道该怎么做)。

使用我的标记,所有内容都是左对齐的,所以我做错了什么?

这是我的标记:

<ResourceDictionary>
    <Style TargetType="GridViewColumnHeader">
        <Setter Property="HorizontalContentAlignment" Value="Left"/>
    </Style>
    <DataTemplate x:Key="value1Template">
        <TextBlock TextAlignment="Right" Text="{Binding Path=Description}"/>
    </DataTemplate>
    <DataTemplate x:Key="value2Template">
        <TextBlock TextAlignment="Center"  Text="{Binding Path=IncludesVATCaption}"/>
    </DataTemplate>
    <DataTemplate x:Key="value3Template">
        <TextBlock TextAlignment="Center"  Text="{Binding Path=Cost}"/>
    </DataTemplate>
</ResourceDictionary>

<ListView x:Name="lvWorkItems">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Description" CellTemplate="{StaticResource value1Template}"  Width="190">
            </GridViewColumn>
            <GridViewColumn Header="IsVat" Width="50" CellTemplate="{StaticResource value2Template}"/>
            <GridViewColumn Header="Cost" Width="65" CellTemplate="{StaticResource value3Template}" />
        </GridView>
    </ListView.View>
</ListView>

您应该将 HorizontalContentAligment 属性 设置为 Stretch 以便一行中的 column/cell 可以取所需的 space。这可以通过设置 属性 到 ItemContainerStyle.

来实现
 <ListView.ItemContainerStyle>
       <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
       </Style>
 </ListView.ItemContainerStyle>

您看到该行为导致您为 GridViewColumnHeader 设置了样式,并且它适用于所有列。您可以通过为 Center 对齐列添加 DataTrigger 来更改此 Style

<ResourceDictionary>
    <Style TargetType="GridViewColumnHeader">
        <Setter Property="HorizontalContentAlignment" Value="Left"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Column.HeaderStringFormat}" Value="Center">
                <Setter Property="HorizontalContentAlignment" Value="Center"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ResourceDictionary>

你应该为他们设置HeaderStringFormat="Center" 属性。我知道这有点棘手。

<GridViewColumn Header="IsVat" Width="50" CellTemplate="{StaticResource value2Template}" HeaderStringFormat="Center"/>
<GridViewColumn Header="Cost" Width="65" CellTemplate="{StaticResource value3Template}" HeaderStringFormat="Center" />