如何在GridView(ListView)列中对齐文本或内容

时间:2019-11-17 10:03:23

标签: c# wpf listview gridview

我想用以下方式在GridViewColumn中声明ListView

<ListView ItemsSource="{Binding Sells}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="No. of order" Width="80"
                    DisplayMemberBinding="{Binding NoOfOrder, StringFormat=N0}"/>
            <GridViewColumn Header="Quantity" Width="100"
                    DisplayMemberBinding="{Binding Quantity, StringFormat=N0}"/>
            <GridViewColumn Header="Price" Width="100"
                    DisplayMemberBinding="{Binding Price, StringFormat=N2}"/>
        </GridView>
    </ListView.View>
</ListView>

但是问题是列标题以及单元格未按我想要的方式对齐,我的应用程序中有多个ListView,我希望它们的某些列标题为以及将单元格对齐到中心,将其他单元格对齐,我在此站点上找到的解决方案是执行以下操作:

<ListView ItemsSource="{Binding Buys}">
    <ListView.Resources>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListView.Resources>
    <ListView.View>
        <GridView>
            <GridViewColumn Width="80">
                <GridViewColumn.Header>
                    <GridViewColumnHeader Content="No. of order" HorizontalContentAlignment="Center"/>
                </GridViewColumn.Header>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding NoOfOrder}" TextAlignment="Center"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>

            <GridViewColumn Width="100">
                <GridViewColumn.Header>
                    <GridViewColumnHeader Content="Quantity" HorizontalContentAlignment="Right"/>
                </GridViewColumn.Header>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Quantity, StringFormat=N0}" TextAlignment="Right"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>

            <GridViewColumn Width="100">
                <GridViewColumn.Header>
                    <GridViewColumnHeader Content="Price" HorizontalContentAlignment="Right"/>
                </GridViewColumn.Header>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Price, StringFormat=N2}" TextAlignment="Right"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

3列ListView的确很多!我还有一些其他的具有7/8列,因此以这种方式重写所有这些列肯定很痛苦!有没有一种方法可以像我在第一个示例中为ListView所定义的那样声明这些Sells,并具有一些模板和绑定机制,以便我可以这样编写这些列:

<ListView ItemsSource="{Binding Sells}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="No. of order" Align="Center" Width="80"
                    DisplayMemberBinding="{Binding NoOfOrder, StringFormat=N0}"/>
            <GridViewColumn Header="Quantity" Align="Right" Width="100"
                    DisplayMemberBinding="{Binding Quantity, StringFormat=N0}"/>
            <GridViewColumn Header="Price" Align="Right" Width="100"
                    DisplayMemberBinding="{Binding Price, StringFormat=N2}"/>
        </GridView>
    </ListView.View>
</ListView>

还是类似的东西?

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案是编写“附加行为”。此实现使用两个属性。必须在相应的ListView.IsColumnContentAlignmentEnabled的{​​{1}}和类型TextAlignmentListView上设置ListView.ColumnContentAlignment(如果未设置此属性,则该值将默认为{{ 1}})。

这是因为没有简单的方法来获得GridViewColumn的父TextAlignment.Left

以下附加行为允许对齐任何ListView(不仅GridViewColumn元素):

ListView.cs

FrameworkElement

用法示例

TextBlock
相关问题