当前位置:  开发笔记 > 开发工具 > 正文

如何在WPF中更改网格网格线的颜色?

如何解决《如何在WPF中更改网格网格线的颜色?》经验,为你挑选了3个好方法。

我有一个Grid(不是DataGrid,但是一个真正的网格),GridLines设置为True.如何更改网格线的颜色?在XAML中硬编码是可以的,因为它仅仅是出于开发原因.


jschroedl.. 35

抱歉,无法使用ShowGridLines完成 - 您需要设置包含的元素的样式.

图表A:

MSDN文档说"只有虚线可用,因为此属性旨在用作调试布局问题的设计工具,而不是用于生产质量代码.如果您想要网格内的线条,请将网格中的元素设置为具有边框".

图表B - WPF源代码:

注意Brushes.Blue和Brushes.Yellow在这个密封的内部类中进行了硬编码,System.Windows.Controls.Grid使用它来绘制线条.

来自Grid.cs

    /// 
    /// Helper to render grid lines. 
    /// 
    internal class GridLinesRenderer : DrawingVisual 
    { 
        /// 
        /// Static initialization 
        /// 
        static GridLinesRenderer()
        {
            s_oddDashPen = new Pen(Brushes.Blue, c_penWidth); 
            DoubleCollection oddDashArray = new DoubleCollection();
            oddDashArray.Add(c_dashLength); 
            oddDashArray.Add(c_dashLength); 
            s_oddDashPen.DashStyle = new DashStyle(oddDashArray, 0);
            s_oddDashPen.DashCap = PenLineCap.Flat; 
            s_oddDashPen.Freeze();

            s_evenDashPen = new Pen(Brushes.Yellow, c_penWidth);
            DoubleCollection evenDashArray = new DoubleCollection(); 
            evenDashArray.Add(c_dashLength);
            evenDashArray.Add(c_dashLength); 
            s_evenDashPen.DashStyle = new DashStyle(evenDashArray, c_dashLength); 
            s_evenDashPen.DashCap = PenLineCap.Flat;
            s_evenDashPen.Freeze(); 
        }


小智.. 11

var T = Type.GetType("System.Windows.Controls.Grid+GridLinesRenderer," +
    " PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");

var GLR = Activator.CreateInstance(T);
GLR.GetType().GetField("s_oddDashPen", BindingFlags.Static | BindingFlags.NonPublic).SetValue(GLR, new Pen(Brushes.Black, 1.0));
GLR.GetType().GetField("s_evenDashPen", BindingFlags.Static | BindingFlags.NonPublic).SetValue(GLR, new Pen(Brushes.Black, 1.0));

myGrid.ShowGridLines = true;


JLott.. 6

这个答案不是如何实际更改GridLines,而是如何让它看起来像你以一种非常简单的方式做的.我相信其他人有更好的方法来做到这一点,但这是我如何完成显示我的网格线.


                                
                                    
                                    
                                     
                                
                                
                                
                                                      
                                
                                        
                                
                            

为列定义或网格定义创建边框,并将Grid.Column属性设置为您希望的任何值.然后您可以设置颜色,厚度或样式.甜美而简单.希望这有助于其他人!

这是这个网格的图像:

在此输入图像描述



1> jschroedl..:

抱歉,无法使用ShowGridLines完成 - 您需要设置包含的元素的样式.

图表A:

MSDN文档说"只有虚线可用,因为此属性旨在用作调试布局问题的设计工具,而不是用于生产质量代码.如果您想要网格内的线条,请将网格中的元素设置为具有边框".

图表B - WPF源代码:

注意Brushes.Blue和Brushes.Yellow在这个密封的内部类中进行了硬编码,System.Windows.Controls.Grid使用它来绘制线条.

来自Grid.cs

    /// 
    /// Helper to render grid lines. 
    /// 
    internal class GridLinesRenderer : DrawingVisual 
    { 
        /// 
        /// Static initialization 
        /// 
        static GridLinesRenderer()
        {
            s_oddDashPen = new Pen(Brushes.Blue, c_penWidth); 
            DoubleCollection oddDashArray = new DoubleCollection();
            oddDashArray.Add(c_dashLength); 
            oddDashArray.Add(c_dashLength); 
            s_oddDashPen.DashStyle = new DashStyle(oddDashArray, 0);
            s_oddDashPen.DashCap = PenLineCap.Flat; 
            s_oddDashPen.Freeze();

            s_evenDashPen = new Pen(Brushes.Yellow, c_penWidth);
            DoubleCollection evenDashArray = new DoubleCollection(); 
            evenDashArray.Add(c_dashLength);
            evenDashArray.Add(c_dashLength); 
            s_evenDashPen.DashStyle = new DashStyle(evenDashArray, c_dashLength); 
            s_evenDashPen.DashCap = PenLineCap.Flat;
            s_evenDashPen.Freeze(); 
        }



2> 小智..:
var T = Type.GetType("System.Windows.Controls.Grid+GridLinesRenderer," +
    " PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");

var GLR = Activator.CreateInstance(T);
GLR.GetType().GetField("s_oddDashPen", BindingFlags.Static | BindingFlags.NonPublic).SetValue(GLR, new Pen(Brushes.Black, 1.0));
GLR.GetType().GetField("s_evenDashPen", BindingFlags.Static | BindingFlags.NonPublic).SetValue(GLR, new Pen(Brushes.Black, 1.0));

myGrid.ShowGridLines = true;



3> JLott..:

这个答案不是如何实际更改GridLines,而是如何让它看起来像你以一种非常简单的方式做的.我相信其他人有更好的方法来做到这一点,但这是我如何完成显示我的网格线.


                                
                                    
                                    
                                     
                                
                                
                                
                                                      
                                
                                        
                                
                            

为列定义或网格定义创建边框,并将Grid.Column属性设置为您希望的任何值.然后您可以设置颜色,厚度或样式.甜美而简单.希望这有助于其他人!

这是这个网格的图像:

在此输入图像描述

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有