让 WPF DataGrid 看上去像 ListView/GridView

WPF 里的 DataGrid 控件有一些很好的特性,比如可以自动点击列标题排序。不过对于使用 ListView 习惯的人来说,DataGrid 那种基于单元格的操作界面,如果不是用于真的表格上,还真有点不习惯。因此我尝试设置 DataGrid 的风格,让它看上去比较像 ListView。目前还不完善,但是先把已经实现的记录下来吧。

<DataGrid AutoGenerateColumns="False" 
          GridLinesVisibility="None"
          HeadersVisibility="Column"
          CanUserAddRows="False"
          CanUserResizeRows="False"
          EnableRowVirtualization="True"
          Background="White"
          SelectionMode="Single">

    <DataGrid.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="BorderThickness" Value="0"/>
            <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
        </Style>
    </DataGrid.CellStyle>

</DataGrid>

DataGrid 部分

AutoGenerateColumns="False" 使得 DataGrid 不要自动生成列。这跟界面样式没什么关系,不过放在这里备忘罢了。

GridLinesVisibility="None" 不显示表格边框。DataGrid 默认会把所有单元格加上框,丑!

HeadersVisibility="Column" 不显示行前的标题。这样和 ListView 比较符合。

CanUserAddRows="False" 不让用户加行。不然会多出来一个空行。

CanUserResizeRows="False" 不让用户调整行高。与 ListView 保持一致。

EnableRowVirtualization="True" 非常必要,不然显示起来很慢。

Background="White" 默认的背景色为灰色,这样在滚动条滚到最后时,底部多出来的一截(这一截总是小于行高,因为显示区域的第一个可见行要与空间顶端对齐)会变成灰色,很难看。将背景色设为白色可以与 ListView 一致,但是会在右边的纵向滚动条上方(即列标题的右侧)出现一个白色的区域,这是因为纵向滚动条没有像 ListView 那样顶到控件顶端。要解决这个难看的白色小方块需要自定义 DataGrid 的样式,我还不知道怎么搞定。

SelectionMode="Single" 单行选定。

CellStyle 部分

BorderThickness="0" 用来去除选定单元格四周的黑色边框。仅仅在前面采用 GridLinesVisibility="None" 并不作用于选定的单元格。

FocusVisualStyle="{x:Null}" 用来去除焦点单元格四周的虚线框。

遗留问题

通过上述改造,DataGrid 还是有很多地方与 ListView 不同。比如 Tab 键的行为等等。因此还有待进一步改进。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF 中的 DataGridListView 都没有内置的分页控件,但可以通过一些方法来实现分页功能。 一种实现方式是使用 CollectionView,它是用于对集合进行排序、过滤和分组的类。可以使用 CollectionViewSource 创建 CollectionView,并在 XAML 中绑定到分页控件中。 以下是一个示例,其中使用 CollectionViewSource 来创建 CollectionView,并将其绑定到 ListView 控件中: ```xml <Grid> <Grid.Resources> <CollectionViewSource x:Key="cvs" Source="{Binding Items}" PageSize="10"/> </Grid.Resources> <ListView ItemsSource="{Binding Source={StaticResource cvs}}" /> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> <Button Content="Prev" Command="{Binding Source={StaticResource cvs}, Path=PageUpCommand}" /> <TextBlock Text="{Binding Source={StaticResource cvs}, Path=PageIndex}" /> <Button Content="Next" Command="{Binding Source={StaticResource cvs}, Path=PageDownCommand}" /> </StackPanel> </Grid> ``` 在上面的示例中,CollectionViewSource 用于创建 CollectionView,并使用 PageSize 属性来指定每页的项数。ListView 控件绑定到 CollectionViewSource 中的 CollectionView。 同时,使用按钮来切换分页,每个按钮都绑定到 CollectionViewSource 中的 PageUpCommand 和 PageDownCommand 命令,以便在前一页和后一页之间切换。 还有其他的实现方式,例如手动分页和使用第三方分页控件等等。具体实现方式可以根据项目需求来选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值