我有一个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属性设置为您希望的任何值.然后您可以设置颜色,厚度或样式.甜美而简单.希望这有助于其他人!
这是这个网格的图像:
抱歉,无法使用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(); }
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;
这个答案不是如何实际更改GridLines,而是如何让它看起来像你以一种非常简单的方式做的.我相信其他人有更好的方法来做到这一点,但这是我如何完成显示我的网格线.
为列定义或网格定义创建边框,并将Grid.Column属性设置为您希望的任何值.然后您可以设置颜色,厚度或样式.甜美而简单.希望这有助于其他人!
这是这个网格的图像: