社区首页 >问答首页 >Datagrid ColumnHeader样式呈现奇怪的双边框

Datagrid ColumnHeader样式呈现奇怪的双边框
EN

Stack Overflow用户
提问于 2020-07-17 12:28:55
回答 1查看 43关注 0票数 0

我为DataGridColumnHeader做了一个样式。大部分都是有效的,但是我通过头文本得到了second边界,我不知道如何解决这个问题。我得到的结果见下图:

我只想要文本下面的一个边框。这是我做的风格:

代码语言:javascript
代码运行次数:0
复制
<Style TargetType="{x:Type DataGridColumnHeader}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                <Grid Name="HeaderGrid">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="14" />
                    </Grid.ColumnDefinitions>
                    <Border
                        x:Name="BackgroundBorder"
                        Grid.ColumnSpan="2"
                        BorderBrush="{DynamicResource Dark}"
                        BorderThickness="0,0,1,1"/>
                    <ContentPresenter
                        Grid.Column="0"
                        Margin="6,3,6,3"
                        VerticalAlignment="Center" />
                    <Path
                        x:Name="SortArrow"
                        Grid.Column="1"
                        Width="6"
                        Height="4"
                        Margin="0,0,8,0"
                        VerticalAlignment="Center"
                        Data="M 0 4 L 3.5 0 L 7 4 Z"
                        Fill="{DynamicResource Dark}"
                        RenderTransformOrigin="0.5,0.4"
                        Stretch="Fill"
                        Visibility="Collapsed" />
                    <Thumb
                        x:Name="PART_RightHeaderGripper"
                        Grid.Column="1"
                        HorizontalAlignment="Right"
                        Cursor="SizeWE">
                        <Thumb.Style>
                            <Style TargetType="{x:Type Thumb}">
                                <Setter Property="Width" Value="2" />
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="{x:Type Thumb}">
                                            <Border Background="Transparent" BorderBrush="Transparent" />
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </Thumb.Style>
                    </Thumb>
                </Grid>
                
                <ControlTemplate.Triggers>
                    <Trigger Property="SortDirection" Value="Ascending">
                        <Setter TargetName="SortArrow" Property="Visibility" Value="Visible" />
                        <Setter TargetName="SortArrow" Property="RenderTransform">
                            <Setter.Value>
                                <RotateTransform Angle="180" />
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                    <Trigger Property="SortDirection" Value="Descending">
                        <Setter TargetName="SortArrow" Property="Visibility" Value="Visible" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

有人能告诉我我做的发型哪里错了吗?

编辑:

我已经把所有的元素都放在边框里了,但是这似乎不能修复它。当我为边框指定不同的粗细时,结果如下:

代码语言:javascript
代码运行次数:0
复制
BorderThickness="0,2,1,4"

上边框和下边框都出现两次。为标题添加MinHeight将删除双边框。这似乎不是一个完美的解决方案,但目前有效。

EN

回答 1

Stack Overflow用户

发布于 2020-07-18 14:37:29

我建议你仔细看看原始模板是如何工作的。

不清楚你想要实现什么,但你需要两个拇指来调整大小。

在下面的页面上

https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/datagrid-styles-and-templates

在列标题上搜索,然后循环搜索命中结果,直到您看到标记如下所示:

代码语言:javascript
代码运行次数:0
复制
<!--Style and template for the DataGridColumnHeader.-->
<Style TargetType="{x:Type DataGridColumnHeader}">
   <Setter Property="VerticalContentAlignment"
         Value="Center" />
   <Setter Property="Template">
     <Setter.Value>
       <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
    <Grid>
      <Border x:Name="columnHeaderBorder"
              BorderThickness="1"
              Padding="3,0,3,0">
        <Border.BorderBrush>
          <LinearGradientBrush EndPoint="0.5,1"
                               StartPoint="0.5,0">
            <GradientStop Color="{DynamicResource BorderLightColor}"
                          Offset="0" />
            <GradientStop Color="{DynamicResource BorderDarkColor}"
                          Offset="1" />
          </LinearGradientBrush>
        </Border.BorderBrush>
        <Border.Background>
          <LinearGradientBrush EndPoint="0.5,1"
                               StartPoint="0.5,0">
            <GradientStop Color="{DynamicResource ControlLightColor}"
                          Offset="0" />
            <GradientStop Color="{DynamicResource ControlMediumColor}"
                          Offset="1" />
          </LinearGradientBrush>
        </Border.Background>
        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                          SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
      </Border>

      <Thumb x:Name="PART_LeftHeaderGripper"
             HorizontalAlignment="Left"
             Style="{StaticResource ColumnHeaderGripperStyle}" />
      <Thumb x:Name="PART_RightHeaderGripper"
             HorizontalAlignment="Right"
             Style="{StaticResource ColumnHeaderGripperStyle}" />
     </Grid>
   </ControlTemplate>
 </Setter.Value>

请特别注意:

你需要一个PART_LeftHeaderGripper拇指。

两个拇指都使用左右水平排列,这将阻止它们像你一样填充单元格。

在样式中设置了宽度。

作为最后一条建议。

我强烈建议您从标准控件模板的工作副本开始。然后小心地进行小的迭代更改。这样,当它坏了,你就知道是什么把它弄坏了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62953985

复制
相关文章
边框样式的写法总结
今天在群里讨论了border的样式写法,发现border的写法还真是灵活,做了一下总结,希望对大家有用:
GhostZhang
2022/08/22
3720
WPF --- 重写圆角DataGrid样式
因要符合UI设计, 需要一个圆角的 DataGrid 样式,且需要一个更美观的滚动条,所以重写了一下微软 「WPF」 原生的 DataGrid 的样式,包含如下内容:
Niuery Diary
2023/10/22
6740
WPF --- 重写圆角DataGrid样式
html去除input边框以及选中时边框 默认样式
html写到input边框时,选中会出现选中时边框,默认样式看起来有点违和 下面带来去除的方法
小唐同学.
2022/02/23
8.3K0
5.边框样式-CSS基础
一、边框 几乎可以对所有元素定义边框。 我们可以为div元素、img元素、span元素、table元素定义边框。 1.设置边框的三方面 边框宽度 边框外观(实线、虚线等) 边框颜色 (1)边框样式属性 属性 说明 border-width 边框的宽度 border-style 边框的外观 border-color 边框的颜色 想要为一个元素定义边框样式,我们必须同时设置border-width、border-style、border-color这三个属性才会有效果。 二、整体样式 1.边
见贤思齊
2020/10/28
1.3K0
5.边框样式-CSS基础
表格样式—粗边框细表格线
table #tbl{ border-collapse:collapse;border:2px solid #6699cc;} #tbl th {border: 1px solid #6699cc;
用户1075292
2018/01/23
2.2K0
表格样式—粗边框细表格线
【网页前端】CSS的基本样式边框、布局、字体
例如: border:1px solid red , 1 像素粗的 实线 红色边框。
陶然同学
2023/02/27
1.7K0
【网页前端】CSS的基本样式边框、布局、字体
DIV+CSS颜色边框背景等样式
使用缩写可以帮助减少你CSS文件的大小,更加容易阅读。css缩写的主要规则请参看《常用css缩写语法总结》,css缩写的主要规则如下:
全栈程序员站长
2022/07/15
1.7K0
使用样式表去除边框线
Qt的一些控件(QPushButton,QCheckBox,QRadioButton等等)通过点击鼠标或切换方向键获得的焦点后会出现边框线,非常影响美观,本文通过设置样式表去除边框线。 如图 样式表
Qt君
2020/07/16
1.9K0
使用样式表去除边框线
CSS学习笔记:边框样式,列表符号【7/27】
除了上表列出这几个,还有hidden、dotted、double等取值。不过其他取值几乎用不上,可以直接忽略。
岳泽以
2022/10/26
7560
CSS学习笔记:边框样式,列表符号【7/27】
CSS3选择器与边框样式
之前介绍过[ ]里可以定义属性或属性值,之后的标签中只要含有该定义的属性或属性值就会拥有该样式。所以继续介绍剩下的几种声明方式。
端碗吹水
2020/09/23
1.8K0
CSS3选择器与边框样式
CSS样式更改——字体设置Font&边框Border
上篇文章主要讲述了CSS样式更改中的背景Background,这篇文章我们来谈谈字体设置Font&边框Border的基础用法。。
前端皮皮
2020/11/25
3.3K0
【CSS】盒子边框 ① ( 网页布局本质 | 盒子模型 | 盒子边框 Border | border-width 宽度 | border-style 边框样式 | 边框颜色 | 边框设置综合写法 )
HTML 的 一个布局 可以看做一个 矩形的 盒子模型 , 该 盒子模型 是一个用于 容纳 标签元素 的容器 ;
韩曙亮
2023/03/30
3.2K0
【CSS】盒子边框 ① ( 网页布局本质 | 盒子模型 | 盒子边框 Border | border-width 宽度 | border-style 边框样式 | 边框颜色 | 边框设置综合写法 )
表格行与列边框样式处理的原理分析及实战应用
导语: table之间的边框存在共用问题,自然而然就存在冲突。既然存在冲突,那么就势必涉及到最后渲染哪一个样式的问题。本文就主要研究当冲突产生时,如何让浏览器按照自己意愿渲染冲突边框。在这篇文章中都有
韩宇波
2017/10/30
5.2K6
表格行与列边框样式处理的原理分析及实战应用
奇怪的电梯
§、奇怪的电梯(lift.cpp) §【问题描述】 §大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3 3 1 2 5代表了Ki(K1=3,K2=3,……),从一楼开始。在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2楼。那么,从A楼到B楼至少要按几次按钮呢? §【输入格式】lift.in §输入文件共有二行,第一行为三个用
attack
2018/04/12
1.5K0
奇怪的知识
而数据中台则是将数据服务化之后提供给业务系统, 目标是将数据能力渗透到各个业务环节
solve
2022/03/30
8240
扩展ToolBarManager、ListView和Grid控件以实现气球式的ToolTip
infragistics是全球领先的UI工具和用户体验的专家,Infragistics开发了一系列的炫目的Windows、Web、WPF和Silverlight控件,相信很多人在使用它们。我们现在的项目就在使用Infragistics的Windows Form控件集。虽然这些控件功能强大,也不可能满足你所有的需求,尤其是那些比较苛刻的最终用户的需求。比如,我们最近就接收到这样一个变态的需求:让所以菜单项、工具栏按钮、网格单元的ToolTip以气球式的样式显示。最终,我不得不通过对现有控件的扩展实现这个要求。
蒋金楠
2018/01/16
1.3K0
扩展ToolBarManager、ListView和Grid控件以实现气球式的ToolTip
html中hr标签的基础知识
在 XHTML 1.0 Strict DTD 中,hr 元素的所有呈现属性均不被支持。
德顺
2019/11/13
3.1K0
DataGrid的ItemDataBound事件
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/155461.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/06
5110
奇怪的 Javascript
我的意思是,对于刚开始使用这种语言和他语言(例如 C++ 或 C#)的开发人员来说,javascript 可能会很奇怪。
疯狂的技术宅
2020/04/24
9590
奇怪的 Javascript
奇怪的颜色
计算属性值字符个数,再把所有字符分成3组,不能有余数,如果位数不够就补0, 每组颜色只有前两个字符有效并以十六进制的方式表示 ,非十六进制的字符以0表示。
GhostZhang
2022/08/22
7910
奇怪的颜色

相似问题

WPF DataGrid ColumnHeader样式:无法在ControlTemplate中使文本粗体

14

DataGrid ColumnHeader PreviewLeftMouseButtonDown事件限制

21

样式Datagrid页眉边框问题

03

DataGrid ColumnHeader中的格式空白/填充

25

单击ColumnHeader选择整个列。WPF DATAGRID

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文