让 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 键的行为等等。因此还有待进一步改进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值