Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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
C# 平铺几何图形中的网格线_C#_Wpf_Xaml - Fatal编程技术网

C# 平铺几何图形中的网格线

C# 平铺几何图形中的网格线,c#,wpf,xaml,C#,Wpf,Xaml,尝试将网格线添加到我拥有的图案中。到目前为止,我能想到的是如下所示 我为此使用的XAML代码是: <Border.Background> <DrawingBrush TileMode="Tile" Viewport="0,0,100,100" ViewportUnits="Absolute"> <DrawingBrush.Drawing> <GeometryDrawing Geometry="M0,0 H16 V16 H

尝试将网格线添加到我拥有的图案中。到目前为止,我能想到的是如下所示

我为此使用的XAML代码是:

 <Border.Background>
   <DrawingBrush TileMode="Tile" Viewport="0,0,100,100" ViewportUnits="Absolute">
     <DrawingBrush.Drawing>
       <GeometryDrawing Geometry="M0,0 H16 V16 H32 V32 H16 V16 H0Z" Brush="Green" />
     </DrawingBrush.Drawing>
   </DrawingBrush>
 </Border.Background>

但是,我想在此处添加网格线,使其看起来如下所示:

在这里,瓷砖内有网格线,瓷砖边缘稍厚

我并没有使用所需的模式在某些图像上平铺,以避免占用系统资源


非常感谢您的帮助或指点。

您需要在画笔中使用画笔,外部画笔需要是2x2的矩形网格或其他东西才能获得棋盘图案。这应该可以做到:

<Border Width="750" Height="750" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="True">
    <Border.Resources>
        <Style x:Key="BaseRectangle"  TargetType="{x:Type Rectangle}">
            <Setter Property="Stroke" Value="#505050" />
            <Setter Property="StrokeThickness" Value="2" />
            <Setter Property="Width" Value="151" />
            <Setter Property="Height" Value="151" />
        </Style>
        <Style x:Key="RectangleA"  TargetType="{x:Type Rectangle}" BasedOn="{StaticResource BaseRectangle}">
            <Setter Property="Fill">
                <Setter.Value>
                    <VisualBrush Viewport="0,0,30,30" ViewportUnits="Absolute" TileMode="Tile" Viewbox="0,0,30,30" ViewboxUnits="Absolute">
                        <VisualBrush.Visual>
                            <Rectangle Stroke="#343434" StrokeThickness="1" Fill="#101010" Width="31" Height="31" />
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="RectangleB"  TargetType="{x:Type Rectangle}" BasedOn="{StaticResource BaseRectangle}">
            <Setter Property="Fill">
                <Setter.Value>
                    <VisualBrush Viewport="0,0,30,30" ViewportUnits="Absolute" TileMode="Tile" Viewbox="0,0,30,30" ViewboxUnits="Absolute">
                        <VisualBrush.Visual>
                            <Rectangle Stroke="#343434" StrokeThickness="1" Fill="#202020" Width="31" Height="31" />
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Setter.Value>
            </Setter>
        </Style>
    </Border.Resources>
    <Border.Background>
        <VisualBrush Viewport="0,0.5,300,300" ViewportUnits="Absolute" TileMode="Tile" Viewbox="0,0.5,300,300" ViewboxUnits="Absolute">
            <VisualBrush.Visual>
                <Canvas>
                    <Rectangle Canvas.Top="0" Canvas.Left="0" Style="{StaticResource RectangleA}" />
                    <Rectangle Canvas.Top="0" Canvas.Left="150" Style="{StaticResource RectangleB}" />
                    <Rectangle Canvas.Top="150" Canvas.Left="0" Style="{StaticResource RectangleB}" />
                    <Rectangle Canvas.Top="150" Canvas.Left="150" Style="{StaticResource RectangleA}" />
                </Canvas>
            </VisualBrush.Visual>
        </VisualBrush>
    </Border.Background>
</Border>

结果:

一种更快的方法是将棋盘格线和网格线作为单独的层进行渲染,如果您能够成功的话。这允许您使用几何体而不是形状渲染所有内容:

<Border Width="750" Height="750" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="True">
    <Border.Background>
        <VisualBrush Viewport="0,0.5,300,300" ViewportUnits="Absolute" TileMode="Tile" Viewbox="0,0.5,300,300" ViewboxUnits="Absolute">
            <VisualBrush.Visual>
                <Canvas Width="300" Height="300">
                    <Canvas.Background>
                        <DrawingBrush Stretch="None" TileMode="Tile" Viewport="0,0,300,300" ViewportUnits="Absolute">
                            <DrawingBrush.Drawing>
                                <DrawingGroup>
                                    <GeometryDrawing Brush="#101010">
                                        <GeometryDrawing.Geometry>
                                            <RectangleGeometry Rect="0,0,300,300" />
                                        </GeometryDrawing.Geometry>
                                    </GeometryDrawing>
                                    <GeometryDrawing Brush="#202020">
                                        <GeometryDrawing.Geometry>
                                            <GeometryGroup>
                                                <RectangleGeometry Rect="0,0,150,150" />
                                                <RectangleGeometry Rect="150,150,150,150" />
                                            </GeometryGroup>
                                        </GeometryDrawing.Geometry>
                                    </GeometryDrawing>
                                </DrawingGroup>
                            </DrawingBrush.Drawing>
                        </DrawingBrush>
                    </Canvas.Background>
                    <Rectangle Stroke="#505050" StrokeThickness="2" Width="300" Height="300">
                        <Rectangle.Fill>
                            <VisualBrush Viewport="0,0.5,30,30" ViewportUnits="Absolute" TileMode="Tile" Viewbox="0,0.5,30,30" ViewboxUnits="Absolute">
                                <VisualBrush.Visual>
                                    <Path Stroke="#343434" StrokeThickness="1" Width="31" Height="31" Data="M 0,31 L 0,0 30,0" />
                                </VisualBrush.Visual>
                            </VisualBrush>
                        </Rectangle.Fill>
                    </Rectangle>
                </Canvas>
            </VisualBrush.Visual>
        </VisualBrush>
    </Border.Background>
</Border>

您需要在画笔中使用画笔,外部画笔需要是2x2的矩形网格或其他东西才能获得棋盘图案。这应该可以做到:

<Border Width="750" Height="750" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="True">
    <Border.Resources>
        <Style x:Key="BaseRectangle"  TargetType="{x:Type Rectangle}">
            <Setter Property="Stroke" Value="#505050" />
            <Setter Property="StrokeThickness" Value="2" />
            <Setter Property="Width" Value="151" />
            <Setter Property="Height" Value="151" />
        </Style>
        <Style x:Key="RectangleA"  TargetType="{x:Type Rectangle}" BasedOn="{StaticResource BaseRectangle}">
            <Setter Property="Fill">
                <Setter.Value>
                    <VisualBrush Viewport="0,0,30,30" ViewportUnits="Absolute" TileMode="Tile" Viewbox="0,0,30,30" ViewboxUnits="Absolute">
                        <VisualBrush.Visual>
                            <Rectangle Stroke="#343434" StrokeThickness="1" Fill="#101010" Width="31" Height="31" />
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="RectangleB"  TargetType="{x:Type Rectangle}" BasedOn="{StaticResource BaseRectangle}">
            <Setter Property="Fill">
                <Setter.Value>
                    <VisualBrush Viewport="0,0,30,30" ViewportUnits="Absolute" TileMode="Tile" Viewbox="0,0,30,30" ViewboxUnits="Absolute">
                        <VisualBrush.Visual>
                            <Rectangle Stroke="#343434" StrokeThickness="1" Fill="#202020" Width="31" Height="31" />
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Setter.Value>
            </Setter>
        </Style>
    </Border.Resources>
    <Border.Background>
        <VisualBrush Viewport="0,0.5,300,300" ViewportUnits="Absolute" TileMode="Tile" Viewbox="0,0.5,300,300" ViewboxUnits="Absolute">
            <VisualBrush.Visual>
                <Canvas>
                    <Rectangle Canvas.Top="0" Canvas.Left="0" Style="{StaticResource RectangleA}" />
                    <Rectangle Canvas.Top="0" Canvas.Left="150" Style="{StaticResource RectangleB}" />
                    <Rectangle Canvas.Top="150" Canvas.Left="0" Style="{StaticResource RectangleB}" />
                    <Rectangle Canvas.Top="150" Canvas.Left="150" Style="{StaticResource RectangleA}" />
                </Canvas>
            </VisualBrush.Visual>
        </VisualBrush>
    </Border.Background>
</Border>

结果:

一种更快的方法是将棋盘格线和网格线作为单独的层进行渲染,如果您能够成功的话。这允许您使用几何体而不是形状渲染所有内容:

<Border Width="750" Height="750" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="True">
    <Border.Background>
        <VisualBrush Viewport="0,0.5,300,300" ViewportUnits="Absolute" TileMode="Tile" Viewbox="0,0.5,300,300" ViewboxUnits="Absolute">
            <VisualBrush.Visual>
                <Canvas Width="300" Height="300">
                    <Canvas.Background>
                        <DrawingBrush Stretch="None" TileMode="Tile" Viewport="0,0,300,300" ViewportUnits="Absolute">
                            <DrawingBrush.Drawing>
                                <DrawingGroup>
                                    <GeometryDrawing Brush="#101010">
                                        <GeometryDrawing.Geometry>
                                            <RectangleGeometry Rect="0,0,300,300" />
                                        </GeometryDrawing.Geometry>
                                    </GeometryDrawing>
                                    <GeometryDrawing Brush="#202020">
                                        <GeometryDrawing.Geometry>
                                            <GeometryGroup>
                                                <RectangleGeometry Rect="0,0,150,150" />
                                                <RectangleGeometry Rect="150,150,150,150" />
                                            </GeometryGroup>
                                        </GeometryDrawing.Geometry>
                                    </GeometryDrawing>
                                </DrawingGroup>
                            </DrawingBrush.Drawing>
                        </DrawingBrush>
                    </Canvas.Background>
                    <Rectangle Stroke="#505050" StrokeThickness="2" Width="300" Height="300">
                        <Rectangle.Fill>
                            <VisualBrush Viewport="0,0.5,30,30" ViewportUnits="Absolute" TileMode="Tile" Viewbox="0,0.5,30,30" ViewboxUnits="Absolute">
                                <VisualBrush.Visual>
                                    <Path Stroke="#343434" StrokeThickness="1" Width="31" Height="31" Data="M 0,31 L 0,0 30,0" />
                                </VisualBrush.Visual>
                            </VisualBrush>
                        </Rectangle.Fill>
                    </Rectangle>
                </Canvas>
            </VisualBrush.Visual>
        </VisualBrush>
    </Border.Background>
</Border>


我要花很多时间才能弄明白这一点。这正是我想要的。谢谢NP我刚刚用另一个性能更好的选项更新了答案。祝你好运我要花很多时间才能弄明白。这正是我想要的。谢谢NP我刚刚用另一个性能更好的选项更新了答案。祝你好运