【问题标题】:Align ListView Column Text independently with WPF XAML将 ListView 列文本与 WPF XAML 独立对齐
【发布时间】:2015-12-03 12:49:44
【问题描述】:

我正在学习一些 WPF 控件,但无法单独对齐 listView 列中的文本。我已经能够将它们全部对齐,并对齐标题,而不是列数据本身。我会很感激一些帮助让它工作。

请注意,这类似于这个问题:WPF Listview, align listview item horizontal dynamic not in xaml

我还在博客上尝试了其他一些解决方案。虽然这似乎已经得到解答,但我就是无法让它工作。我希望“文件名”列数据左对齐,其他两列居中对齐。标题都很好,都居中。

作为一个附带问题,显示此类数据的首选方法是什么?我提到的问题暗示 DataGrid 更易于使用。

代码:

        <ListView x:Name="edtListView" Margin="30,68,30,52" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
        <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                <EventSetter Event="MouseDoubleClick" Handler="HandleRow_DoubleClick" />
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.View>
            <GridView>
                <GridView.ColumnHeaderContainerStyle>
                    <Style TargetType="{x:Type GridViewColumnHeader}">
                        <EventSetter Event="Click" Handler="SortHeader_Click"/>                            
                    </Style>
                </GridView.ColumnHeaderContainerStyle>
                <GridViewColumn x:Name="fileNameColumn" DisplayMemberBinding="{Binding Path}" Width="450" TextBlock.TextAlignment="Left" >
                    <GridViewColumn.Header>
                        <GridViewColumnHeader Content="Filename" Tag="Path"/>
                    </GridViewColumn.Header>
                </GridViewColumn>
                <GridViewColumn DisplayMemberBinding="{Binding MissedEdts}" Width="50" TextBlock.TextAlignment="Center" >
                    <GridViewColumn.Header>
                        <GridViewColumnHeader Content="Missed" Tag="MissedEdts"/>
                    </GridViewColumn.Header>
                </GridViewColumn>
                <GridViewColumn DisplayMemberBinding="{Binding Notes}" Width="95" TextBlock.TextAlignment="Center" >
                    <GridViewColumn.Header>
                        <GridViewColumnHeader Content="Notes" Tag="Notes"/>
                    </GridViewColumn.Header>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

**编辑:** 修复它这样做:

正如在几个地方引用的那样,“DisplayMemberBinding”优先于其他任何内容。我只需要为每一列定义一个“DataTemplate”并将“TextBlock.Text”绑定到正确的“Binding Path”。然后删除“DisplayMemberBinding”引用。

<Window.Resources>
    <Style TargetType="{x:Type GridViewColumnHeader}">
        <EventSetter Event="Click" Handler="SortHeader_Click"/>
    </Style>
    <Style TargetType="{x:Type ListViewItem}">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <EventSetter Event="MouseDoubleClick" Handler="HandleRow_DoubleClick" />
    </Style>
    <DataTemplate x:Key="value1Template">
        <TextBlock TextAlignment="Left" Text="{Binding Path}"/>
    </DataTemplate>
    <DataTemplate x:Key="value2Template">
        <TextBlock TextAlignment="Center" Text="{Binding MissedEdts}"/>
    </DataTemplate>
    <DataTemplate x:Key="value3Template">
        <TextBlock TextAlignment="Center" Text="{Binding Notes}"/>
    </DataTemplate>
</Window.Resources>



<ListView x:Name="edtListView" Margin="30,68,30,52" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListView.View>
        <GridView>
            <GridViewColumn x:Name="fileNameColumn" CellTemplate="{StaticResource value1Template}" Width="450" >
                <GridViewColumn.Header>
                    <GridViewColumnHeader Content="Filename" Tag="Path"/>
                </GridViewColumn.Header>
            </GridViewColumn>
            <GridViewColumn  Width="50" CellTemplate="{StaticResource value2Template}">
                <GridViewColumn.Header>
                    <GridViewColumnHeader Content="Missed" Tag="MissedEdts"/>
                </GridViewColumn.Header>
            </GridViewColumn>
            <GridViewColumn CellTemplate="{StaticResource value3Template}" Width="95" >
                <GridViewColumn.Header>
                    <GridViewColumnHeader Content="Notes" Tag="Notes"/>
                </GridViewColumn.Header>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

【问题讨论】:

    标签: c# wpf xaml listview


    【解决方案1】:

    很简单,您的标头会自动使用TextBlock,因为您没有指定容器,请在每个GridViewColumnHeader 中指定它们,然后您就可以用它做您想做的事情(哦,您需要删除您的@987654323 @因为我们现在明确定义了标题的内容),例如:

                <GridViewColumn x:Name="fileNameColumn" Width="450" TextBlock.TextAlignment="Left" >
                    <GridViewColumn.Header>
                        <GridViewColumnHeader Content="Filename" Tag="Path">
                            <TextBlock Text="{Binding Path}" HorizontalTextAlignment="Right" FontSize="100"/> <!--This line-->
                        </GridViewColumnHeader>
                    </GridViewColumn.Header>
                </GridViewColumn>
    

    【讨论】:

    • 谢谢,在我发布之前没有看到你的答案。由于您的更简洁,因此我将删除我的并将其添加为答案的编辑。
    猜你喜欢
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多