是否可以阻止垂直滚动条将DataGrid列/标题向左推?

时间:2012-02-23 11:26:40

标签: wpf xaml datagrid scrollbar

是否可以停止垂直滚动条将DataGrid列/标题向左推? (见图)

或者,是否可以设置小圆圈区域的样式,使其不仅仅显示为白色方块?

GridView

4 个答案:

答案 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,包括数据行没有占用的任何空间:

enter image description here

一种解决方案,如果您希望所讨论的矩形为黄色而不是数据行下方的空间,可能是设计一个自定义画笔,其条带的黄色与列标题的宽度相同,而白色则为其余部分。

答案 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"/>

希望这对某人有帮助!