WPF平铺背景,以像素为单位

时间:2015-12-15 02:09:41

标签: c# wpf

我正在尝试平铺相对于像素大小的画布背景。这就是我现在所拥有的......

enter image description here

我希望它看起来像这样...... 我只想使用代码在后台创建一个平铺网格。我不想使用png或图像文件来创建网格。

enter image description here

<Window x:Class="graph_view.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:graph_view"
        mc:Ignorable="d"
        Title="MainWindow" Height="200" Width="200">
    <Grid >
        <Grid.RowDefinitions>
            <RowDefinition Height="20"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <TextBox Grid.Row="0" Text="10"></TextBox>
        <Canvas Grid.Row="1">
            <Canvas.Background>
                <DrawingBrush TileMode="Tile" Viewbox="0,0,20,20" ViewportUnits="RelativeToBoundingBox" AlignmentX="Left" AlignmentY="Top">
                    <DrawingBrush.Drawing>
                        <GeometryDrawing Brush="sc# 1.0, 0.02, 0.02, 0.02">
                            <GeometryDrawing.Geometry>
                                <GeometryGroup>
                                    <RectangleGeometry Rect="0,0,20,20" />
                                </GeometryGroup>
                            </GeometryDrawing.Geometry>
                            <GeometryDrawing.Pen>
                                <Pen Thickness="1" Brush="red"/>
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                    </DrawingBrush.Drawing>
                </DrawingBrush>
            </Canvas.Background>
        </Canvas>
    </Grid>
</Window>

2 个答案:

答案 0 :(得分:4)

<Canvas>
    <Canvas.Background>
        <VisualBrush TileMode="Tile" Stretch="Uniform" Viewport="10,10,10,10" ViewportUnits="Absolute">
            <VisualBrush.Visual>
                <Rectangle Width="10" Height="10" Fill="Black" Stroke="Red"/>
            </VisualBrush.Visual>
        </VisualBrush>
    </Canvas.Background>
</Canvas>

enter image description here

将矩形StrokeThickness值更改为更多厚度网格。将ViewPortWidth以及Height更改为更大的网格。

<Canvas >
    <Canvas.Background>
        <VisualBrush TileMode="Tile" Stretch="Uniform" Viewport="20,20,20,20" ViewportUnits="Absolute">
            <VisualBrush.Visual>
                <Rectangle Width="20" Height="20" Fill="Black" Stroke="Red" StrokeThickness="0.1"/>
            </VisualBrush.Visual>
        </VisualBrush>
    </Canvas.Background>
</Canvas>

enter image description here

答案 1 :(得分:2)

首先在XAML中命名网格。

在代码隐藏文件中,创建一个循环网格实际宽度的方法,并循环网格的实际高度。

在宽度循环中,您将向网格添加新列,高度循环将添加新行,然后添加具有黑色背景和红色边框的新边框。

在init之后调用构造函数中的方法。

只需将宽度传递给方法即可提供网格行和列的宽度和高度属性。

这也可以通过XAML轻松完成。