Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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,好吧,我绞尽脑汁,谷歌和stackoverflow都想弄明白这一点,但就是弄不明白。我正在尝试使用DrawingBrush和DrawingGroup在我的WPF应用程序(最新版本)的后台做两件事。第一,我想用一个RadialGradientBrush在我的背景中加入一个细微的渐变。这部分工作得很好。我试图完成的第二个部分是,我想把重复的对角线作为背景的一部分。我知道我可以用图像来做,但我更愿意使用几何图形,因为我正在努力学习和掌握WPF。这是我到目前为止所拥有的。径向线看起来很好,但直线不好。任

好吧,我绞尽脑汁,谷歌和stackoverflow都想弄明白这一点,但就是弄不明白。我正在尝试使用DrawingBrush和DrawingGroup在我的WPF应用程序(最新版本)的后台做两件事。第一,我想用一个RadialGradientBrush在我的背景中加入一个细微的渐变。这部分工作得很好。我试图完成的第二个部分是,我想把重复的对角线作为背景的一部分。我知道我可以用图像来做,但我更愿意使用几何图形,因为我正在努力学习和掌握WPF。这是我到目前为止所拥有的。径向线看起来很好,但直线不好。任何帮助都将不胜感激

<Style x:Key="WindowBackground" TargetType="Grid">
        <Setter Property="Background">
            <Setter.Value>
                <DrawingBrush>
                    <DrawingBrush.Drawing>
                        <DrawingGroup>
                            <GeometryDrawing>
                                <GeometryDrawing.Brush>
                                    <RadialGradientBrush GradientOrigin="0.5,0.5" RadiusX="0.5" RadiusY="0.5">
                                        <GradientStop Color="#EE9D40" Offset="0"/>
                                        <GradientStop Color="#BF8230" Offset="1"/>
                                    </RadialGradientBrush>
                                </GeometryDrawing.Brush>
                                <GeometryDrawing.Geometry>
                                    <RectangleGeometry Rect="0,0,1,1"/>
                                </GeometryDrawing.Geometry>
                            </GeometryDrawing>
                            <GeometryDrawing>
                                <GeometryDrawing.Brush>
                                    <DrawingBrush TileMode="Tile" Stretch="None" Viewbox="0,0,1,1" Viewport="0,0,25,25" ViewportUnits="Absolute">
                                        <DrawingBrush.RelativeTransform>
                                            <TranslateTransform X="0" Y="0" />
                                        </DrawingBrush.RelativeTransform>
                                        <DrawingBrush.Drawing>
                                            <GeometryDrawing Brush="#20FFFFFF" Geometry="M10,0 22,0 12,25 0,22 Z" />
                                        </DrawingBrush.Drawing>
                                    </DrawingBrush>
                                </GeometryDrawing.Brush>
                                <GeometryDrawing.Geometry>
                                    <RectangleGeometry Rect="0,0,1,1"/>
                                </GeometryDrawing.Geometry>
                            </GeometryDrawing>
                        </DrawingGroup>
                    </DrawingBrush.Drawing>
                </DrawingBrush>
            </Setter.Value>
        </Setter>
    </Style>

这个技巧应该有效

<LinearGradientBrush EndPoint="0,0" StartPoint="8,8" 
                     MappingMode="Absolute" SpreadMethod="Repeat">
    <GradientStop Color="Black" Offset="0" />
    <GradientStop Color="Black" Offset="0.1" />
    <GradientStop Color="White" Offset="0.1" />
    <GradientStop Color="White" Offset="1" />
</LinearGradientBrush>

我终于让它工作了,但不是像我想要的那样使用一个复合笔刷。我使用了以下样式:

<Style x:Key="WindowBackground" TargetType="Grid">
            <Setter Property="Background">
                <Setter.Value>
                    <RadialGradientBrush GradientOrigin="0.5,0.5" RadiusX="0.5" RadiusY="0.5">
                        <GradientStop Color="#EAA659" Offset="0"/>
                        <GradientStop Color="#BF8230" Offset="1"/>
                    </RadialGradientBrush>
                </Setter.Value>
            </Setter>
        </Style>

        <Style x:Key="HatchOverlay" TargetType="Rectangle">
            <Setter Property="Fill">
                <Setter.Value>
                    <VisualBrush Opacity=".1" TileMode="Tile" Viewport="0,0,10,20" ViewportUnits="Absolute">
                        <VisualBrush.Visual>
                            <Canvas>
                                <Path Stroke="#825821" Data="M 0 0 l 10 20" />
                            </Canvas>
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Setter.Value>
            </Setter>
        </Style>

然后,为了在运行时启用它,我添加了一个矩形作为网格的第一个子元素,如下所示:

<Grid Style="{StaticResource WindowBackground}">
    <Rectangle Style="{StaticResource HatchOverlay}"/>...

...
这给了我想要的效果。谢谢你的帮助;我会投票给你们每个人。

  • 尝试旋转水平线笔刷以避免角隙:

    <VisualBrush TileMode="Tile" 
     Viewport="0,0,5,5" ViewportUnits="Absolute" 
     Viewbox="0,0,5,5"  ViewboxUnits="Absolute">
     <VisualBrush.Visual>
        <Grid Background="White" Height="5">
            <Path Stroke="Black" Data="M 0 3 l 8 0" />
        </Grid>
     </VisualBrush.Visual>
     <VisualBrush.RelativeTransform>
         <RotateTransform CenterX="0.5" CenterY="0.5" Angle="45" />
     </VisualBrush.RelativeTransform>
    </VisualBrush>
    
    
    

看看我的答案。我们在那里画了一个网格,但你可以应用相同的概念。这对我来说不太合适,但我知道你要用它,所以我正在努力解决它。谢谢你的回复!你也是,塞德里克。我会让你知道的。值得一提的是,如果你想要一个更宽的条纹(像我一样),只需增加两个“0.1”偏移值。例如,“0.5”将为您提供相同宽度的交替条纹。