1

到目前为止,我在使用 GridViewColumnHeaders 时遇到了几个问题。最初,我遇到了一个问题,即每个列标题之间都有一小片白色。即使我们将borderthickness 设置为0,白线仍然存在。环顾四周后,我发现我必须使用 ControlTemplate 将标题更改为默认具有文本框属性。我使用了这段代码:

<Style x:Key="gridHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                        <TextBox Text="{TemplateBinding Content}" 
                                 FontWeight="Bold"
                                 FontFamily="Arial"
                                 FontSize="11"
                                 Foreground="#00648D"
                                 Padding="5,0,5,0" 
                                 BorderBrush="#7EB0CC" 
                                 BorderThickness="0,0,2,2"
                                 HorizontalContentAlignment="Center"
                                 VerticalContentAlignment="Center"
                                 IsReadOnly="True"
                                 Background="Transparent"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

这有效并删除了标题列之间的白色小条,它还阻止了用户移动和调整列的大小,从而弄乱了格式,所以这很好。然而,gridviewcolumnheader 的最后仍然有一点白色,如下图所示:

在此处输入图像描述

有没有办法把它也去掉?

4

1 回答 1

2

该空白是您抓取并调整 Header 大小的对象。我相信即使您重新编写标题模板它也存在,因为它是 GridView 模板的一部分,而不是标题列

我不确定是否有办法在不覆盖整个 GridView 模板的情况下覆盖这些颜色,但是您可以在 Visual Tree 加载后导航并从那里手动设置背景颜色。

这是一个使用LoadedListView 事件和一些Visual Tree Helpers的示例

private void ListView_Loaded(object sender, RoutedEventArgs e)
{
    var thumb = VisualTreeHelpers.FindChild<Thumb>((DependencyObject)sender, "PART_HeaderGripper");
    if (thumb == null) return;
    thumb.Background = Brushes.Transparent;

    var thumbContent = VisualTreeHelpers.FindChild<Border>(thumb);
    if (thumbContent == null) return;
    thumbContent.Background = Brushes.Transparent;
}

结果

例子

如果您希望覆盖 ListView 的 ControlTemplate,您可以在此处找到默认的 XAML

于 2012-01-03T15:44:50.033 回答