Wpf 如何为网格绘制素线而不是虚线?
我有个问题,怎么画线而不是虚线 我的代码:Wpf 如何为网格绘制素线而不是虚线?,wpf,Wpf,我有个问题,怎么画线而不是虚线 我的代码: <Grid ShowGridLines="True"> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions>
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
</Grid>
您可以将每个网格元素包装成边框,并根据需要设置样式
(很清楚,你不需要改变列/行的定义,让它们保持原样,而是把你想放的东西放在每一行/列中,放一个边框,然后把内容放在边框内)你可以创建自己的
网格,它会自己画线
<wpfApplication5:MyGrid ShowGridLines="True">
<wpfApplication5:MyGrid.GridLinesPen>
<Pen Brush="DeepSkyBlue" Thickness="5" />
</wpfApplication5:MyGrid.GridLinesPen>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
</wpfApplication5:MyGrid>
以及背后的代码:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace WpfApplication5
{
public class MyGrid : Grid
{
public new static readonly DependencyProperty ShowGridLinesProperty = DependencyProperty.Register(
"ShowGridLines", typeof (bool), typeof (MyGrid), new PropertyMetadata(default(bool)));
public static readonly DependencyProperty GridLinesPenProperty = DependencyProperty.Register(
"GridLinesPen", typeof (Pen), typeof (MyGrid),
new FrameworkPropertyMetadata(default(Pen), FrameworkPropertyMetadataOptions.AffectsRender));
public new bool ShowGridLines
{
get { return (bool) GetValue(ShowGridLinesProperty); }
set { SetValue(ShowGridLinesProperty, value); }
}
public Pen GridLinesPen
{
get { return (Pen) GetValue(GridLinesPenProperty); }
set { SetValue(GridLinesPenProperty, value); }
}
protected override void OnRender(DrawingContext dc)
{
Pen pen = GridLinesPen;
if (pen != null)
{
ColumnDefinitionCollection columnDefinitions = ColumnDefinitions;
if (columnDefinitions.Count > 1)
{
for (int i = 1; i < columnDefinitions.Count; i++)
{
ColumnDefinition columnDefinition = columnDefinitions[i];
double offset = columnDefinition.Offset;
dc.DrawLine(pen, new Point(offset, 0), new Point(offset, RenderSize.Height - 1));
}
}
RowDefinitionCollection rowDefinitions = RowDefinitions;
if (rowDefinitions.Count > 1)
{
for (int i = 1; i < rowDefinitions.Count; i++)
{
RowDefinition rowDefinition = rowDefinitions[i];
double offset = rowDefinition.Offset;
dc.DrawLine(pen, new Point(0, offset), new Point(RenderSize.Width - 1, offset));
}
}
}
base.OnRender(dc);
}
}
}
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Media;
命名空间WpfApplication5
{
公共类MyGrid:Grid
{
public new static readonly dependencProperty ShowGridLinesProperty=dependencProperty.Register(
“ShowGridLines”、typeof(bool)、typeof(MyGrid)、新PropertyMetadata(默认值(bool));
public static readonly dependencProperty GridLinesPenProperty=dependencProperty.Register(
“GridLinesPen”、typeof(笔)、typeof(MyGrid),
新建FrameworkPropertyMetadata(默认值(笔),FrameworkPropertyMetadata选项.AffectsRender));
公共新馆展示网格线
{
获取{return(bool)GetValue(ShowGridLinesProperty);}
set{SetValue(ShowGridLinesProperty,value);}
}
公共钢笔网格
{
获取{return(Pen)GetValue(GridLinesPenProperty);}
set{SetValue(GridLinesPenProperty,value);}
}
受保护的覆盖无效OnRender(DrawingContext dc)
{
钢笔=网格线钢笔;
如果(笔!=null)
{
ColumnDefinition集合columnDefinitions=columnDefinitions;
如果(columnDefinitions.Count>1)
{
for(int i=1;i1)
{
for(int i=1;i
注意:通过将new
添加到ShowGridLines
中,我绕过了该属性的原始行为。这种方法的问题是,每个元素都应该在网格中填充它们的单元格,这可能是不需要的,如果OP使用的是ItemsControl,那么他可以使用ItemContainerTemplate轻松地完成这项工作:。是的,但他的绘图确实显示了一个uniformgrid