如何删除WPF GridView中自动添加的列(HeaderRole=Padding)

问题描述 投票:0回答:2

我正在尝试在 WPF 中制作自定义网格视图,但我刚刚意识到,正如这个 link 所说:

GridViewHeaderRowPresenter 类 执行列标题的布局 在 GridView 中并放置一个附加的 列标题位于末尾以添加空间

并且由于末尾有附加的列标题,最后一列的右侧还有一个额外的列。所以我想知道是否可以修改它,请参考下面的图片image

我的问题是:

  1. 我可以从网格中删除“A”部分吗?
  2. 无论如何,我可以将“B”部分(角色=填充标题)的相同效果添加到“C”部分(第一列之前)吗?

谢谢

wpf xaml gridview
2个回答
0
投票

经过一番摸索后,我设法通过在几个地方设置负边距来隐藏这个额外的列。虽然很 hacky 但很有效:

<Style TargetType="{x:Type ListViewItem}">
    <Setter Property="Margin" Value="0,0,-7,1"/>
</Style>

 <Style TargetType="{x:Type GridViewColumnHeader}">
    <Setter Property="Margin" Value="0,0,-2,0"/>
</Style>

也许添加

<Trigger Property="Role" Value="Padding">
    <Setter Property="Visibility" Value="Collapsed"/>
</Trigger>

也在 GridViewColumnHeader 样式中。

第一个似乎可以根据需要设置为负数;当它不能再减少时,它就会达到上限。这样做仍然会在标题的右侧留下一个 2px 的间隙,这是第二种样式修复的。

唉,-2 边距适用于所有 GridViewColumnHeaders(并且样式触发器方法似乎不起作用),因此它可能会稍微扰乱内部边框和内容对齐,但如果可以忍受,则效果很好。

编辑:实际上是的,划伤-2边距,它有太多负面影响。

<Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" TargetType="{x:Type ScrollViewer}">
里面你会发现一个
<GridViewHeaderRowPresenter>
;将其 Margin 设置为
"0,0,-2,0"
,您将获得相同的效果,但没有任何缺点。


0
投票

要删除第一列“C”,您可以将以下属性添加到 DataGrid 定义中:

RowHeaderWidth="0"
© www.soinside.com 2019 - 2024. All rights reserved.