.net - una - lineas punteadas power point
¿Cómo puedo cambiar el color de las líneas de cuadrícula de una cuadrícula en WPF? (5)
Tengo una Grid
(no una cuadrícula de datos, sino una cuadrícula real), con cuadrículas establecidas en True
. ¿Cómo puedo cambiar el color de las cuadrículas? Hardcoded en XAML está bien, ya que es solo por razones de desarrollo.
<Grid ShowGridLines="True" />
Esta respuesta no es cómo cambiar realmente los GridLines, sino cómo hacer que se vea como lo hizo de una manera muy simple. Estoy seguro de que otros tienen mejores formas de hacerlo, pero aquí es cómo logré mostrar mis líneas de cuadrícula.
<Grid Height="115" Margin="0,0,0,0" ShowGridLines="False">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="220"/>
<ColumnDefinition Width="220"/>
<ColumnDefinition Width="200*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" BorderBrush="White" BorderThickness="1">
</Border>
<Border Grid.Column="1" BorderBrush="White" BorderThickness="1">
</Border>
<Border Grid.Column="2" BorderBrush="White" BorderThickness="1">
</Border>
</Grid>
Cree un borde para sus definiciones de columna o definiciones de cuadrícula y establezca la propiedad Grid.Column en lo que desee. Luego puedes configurar tu color, grosor o estilo. Dulce y sencilla. ¡Espero que esto ayude a alguien más!
Aquí hay una imagen de esta cuadrícula:
Lo sentimos, no se puede hacer con ShowGridLines, debe diseñar los elementos que contiene.
Anexo A:
Los documentos de MSDN dicen "Solo están disponibles las líneas de puntos porque esta propiedad está pensada como una herramienta de diseño para depurar problemas de diseño y no está diseñada para su uso en el código de calidad de producción. . "
Anexo B - El código fuente de WPF:
Observe los Brushes.Blue y Brushes.Yellow codificados en esta clase interna sellada que System.Windows.Controls.Grid usa para dibujar las líneas.
De Grid.cs
/// <summary>
/// Helper to render grid lines.
/// </summary>
internal class GridLinesRenderer : DrawingVisual
{
/// <summary>
/// Static initialization
/// </summary>
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();
}
Una extensión de la respuesta de igalk474 , utilizada como:
<FixedPage.Resources>
<local:GridLinesRenderer x:Key="glr" StrokeColor="Black" StrokeWidth="1.0" />
</FixedPage.Resources>
...
<Grid ShowGridLines="True">
...
</Grid>
Donde local
es el ensamblado local, y FixedPage
es cualquier FrameworkElement .
using System;
using System.Reflection;
using System.Windows;
using System.Windows.Media;
namespace mynamespace.xaml {
public class GridLinesRenderer : DependencyObject {
public static readonly DependencyProperty StrokeWidthProperty = DependencyProperty.Register(
"StrokeWidth", typeof(double), typeof(GridLinesRenderer), new PropertyMetadata(1.0, OnPropertyChanged)
);
public static readonly DependencyProperty StrokeColorProperty = DependencyProperty.Register(
"StrokeColor", typeof(SolidColorBrush), typeof(GridLinesRenderer), new PropertyMetadata(Brushes.Black, OnPropertyChanged)
);
public double StrokeWidth {
get { return (double)GetValue(StrokeWidthProperty); }
set { SetValue(StrokeWidthProperty, value); }
}
public SolidColorBrush StrokeColor {
get { return (SolidColorBrush)GetValue(StrokeColorProperty); }
set { SetValue(StrokeColorProperty, value); }
}
public GridLinesRenderer() {
OnPropertyChanged(this, new DependencyPropertyChangedEventArgs());
}
private static void OnPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e) {
Type T = Type.GetType("System.Windows.Controls.Grid+GridLinesRenderer," +
"PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
var glr = Activator.CreateInstance(T);
Pen glrPen = new Pen(((GridLinesRenderer)source).StrokeColor, ((GridLinesRenderer)source).StrokeWidth);
glr.GetType().GetField("s_oddDashPen", BindingFlags.Static | BindingFlags.NonPublic).SetValue(glr, glrPen);
glr.GetType().GetField("s_evenDashPen", BindingFlags.Static | BindingFlags.NonPublic).SetValue(glr, glrPen);
}
}
}
<Window.Resources>
<SolidColorBrush x:Key="RedGridLine" Color="#FFFF4444" />
<SolidColorBrush x:Key="BlueGridLine" Color="#554444FF"/>
</Window.Resources>
<my:DataGrid VerticalGridLinesBrush="{StaticResource RedGridLine}"
HorizontalGridLinesBrush="{StaticResource BlueGridLine}" >
...
</my:DataGrid>
Ref: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/0202b0dd-38d9-4ad7-8576-d115922aeeec/
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;