是否可以停止垂直滚动条将DataGrid列/标题向左推? (见图)
或者,是否可以设置小圆圈区域的样式,使其不仅仅显示为白色方块?
答案 0 :(得分:6)
请使用以下模板(ColumnSpan可以解决问题):
<Style x:Key="{x:Type DataGridColumnHeadersPresenter}" TargetType="{x:Type DataGridColumnHeadersPresenter}">
<Setter Property="Grid.ColumnSpan" Value="2" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeadersPresenter}">
<Grid>
<DataGridColumnHeader IsHitTestVisible="False" Name="PART_FillerColumnHeader"/>
<ItemsPresenter/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 1 :(得分:1)
滚动条上方的矩形颜色是DataGrid的Background属性。因此,例如,如果您想将其设为黄色,则可以设置
<DataGrid Background="Yellow" ...
这个(可能)的缺点是背景会影响整个DataGrid,包括数据行没有占用的任何空间:
一种解决方案,如果您希望所讨论的矩形为黄色而不是数据行下方的空间,可能是设计一个自定义画笔,其条带的黄色与列标题的宽度相同,而白色则为其余部分。
答案 2 :(得分:0)
不确定这是否有帮助,但我过去曾使用过一种方法将列与其标题分开并单独显示。
列定义在资源中定义:
<UserControl.Resources>
<ResourceDictionary>
<GridViewColumnCollection x:Key="siColumnCollection">
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
...
</DataTemplate>
</GridViewColumn.CellTemplate>
<GridViewColumnHeader Content="Fish"/>
</GridViewColumn>
...
然后标题和列表视图分别呈现,两者都引用相同的资源:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<GridViewHeaderRowPresenter Columns="{StaticResource siColumnCollection}"/>
<ListView Grid.Row="1" ItemsSource="{Binding ViewModelList}">
<ListView.Resources>
<DataTemplate x:Key="siNormalRowTemplate">
<GridViewRowPresenter Columns="{StaticResource siColumnCollection}"/>
</DataTemplate>
</ListView.Resources>
</ListView>
</Grid>
(我不能保证这个XAML完全按照书面形式工作,但它给你的想法。)
这种安排的优点是您可以单独处理列表的标题和主体。因此,如果您想在GridViewHeaderRowPresenter之后立即添加一些填充程序,您可以自由添加。
编辑:如果您有GridView,此解决方案可以正常工作,但遗憾的是,这对DataGrid不起作用。我无法看到在DataGrid中拆分标题和行的等效方法,所以只有当您准备将DataGrid交换为GridView时,此答案才有效。遗憾!
答案 3 :(得分:0)
我知道这个问题是几年前完成的,但我想发布我的解决方案,以帮助其他面临同样问题的人。
基于此答案 (https://stackoverflow.com/a/64356870/13802688) 中 imil4eg 的解决方案,我还创建了一个边框控件来填充 ScrollViewer 的 ControlTemplate 的 Column=2, Row=0 空白空间。但是,我还添加了一个 margin="-1,0,0,0" 以防止标题和我创建的边框之间出现一点间隙。
因此,他的解决方案是在他的回答中添加以下行:
<Border Background="White" BorderThickness="0" Grid.Column="2"/>
我的是一样的,但有描述的边距:
<Border Background="White" BorderThickness="0" Grid.Column="2" Margin="-1,0,0,0"/>
希望这对某人有帮助!