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

时间:2015-12-10 10:03:07

标签: wpf listview alignment

有一个WPF应用程序。

它使用listview控件。

我有3列。 我希望第一列标题保持对齐 我希望其他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>

2 个答案:

答案 0 :(得分:1)

您应该将HorizontalContentAligment属性设置为Stretch,以便行内的列/单元格可以占用所需的空间。这可以通过ItemContainerStyle设置属性来实现。

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

答案 1 :(得分:1)

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

<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" />