不同列和项目的不同对齐方式
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" />
有一个 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" />