繁体   English   中英

使用WPF XAML独立对齐ListView列文本

[英]Align ListView Column Text independently with WPF XAML

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

注意,这类似于以下问题: WPF Listview,将listview项水平动态对齐,不在xaml中

我还在博客上尝试了其他解决方案。 尽管这似乎已经得到了回答,但我还是无法解决这个问题。 我希望“ Filename”列数据保持左对齐,而其他两列居中对齐。 标头都可以居中。

附带的问题是,显示这种数据的首选方法是什么? 我提到的这个问题暗示了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>

容易,您的标头会自动使用TextBlock ,因为您没有指定容器,而是在每个GridViewColumnHeader指定它们,然后您就可以使用它进行操作了(哦,您将需要删除DisplayMemberBinding因为我们明确定义了其中的内容现在是标题),例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM