Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何为网格绘制素线而不是虚线?_Wpf - Fatal编程技术网

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