2017-03-08 19 views
4

WPFで対角線のハッチングパターンを作成したいと思います。私はそれを生成するには、次のXAMLコードを使用しています:WPFで対角線パターンを作成する

<VisualBrush 
    x:Key="HatchBrushnew" 
    TileMode="Tile" Viewport="0,0,30,30" 
    ViewportUnits="Absolute" Viewbox="0,0,30,30"  
    ViewboxUnits="Absolute"> 
     <VisualBrush.Visual> 
      <Canvas> 

       <Path Stroke="Gray" StrokeThickness="0.1cm" > 
        <Path.Data> 
         <LineGeometry StartPoint="0,0" EndPoint="30,30" /> 
        </Path.Data> 
       </Path> 

      </Canvas> 
     </VisualBrush.Visual> 
    </VisualBrush> 

しかし、このパターンで形状を充填した後、私は2つのラインの間に小さなギャップを取得しています。誰もその小さなギャップを避ける方法を提案することはできますか?

Generate Output

答えて

5

DrawingBrushVisualBrushよりもはるかに簡単になります。中心対角線に加え

、これは右上ブラシタイルの左下隅を覆うように(もちろん、短くてもよい)は、2本の追加の線を描画:

<DrawingBrush x:Key="HatchBrush" TileMode="Tile" 
       Viewport="0,0,30,30" ViewportUnits="Absolute" 
       Viewbox="0,0,30,30" ViewboxUnits="Absolute"> 
    <DrawingBrush.Drawing> 
     <GeometryDrawing> 
      <GeometryDrawing.Pen> 
       <Pen Brush="Black" Thickness="5"/> 
      </GeometryDrawing.Pen> 
      <GeometryDrawing.Geometry> 
       <Geometry>M0,0 L30,30 M15,-15 L45,15 M-15,15 L15,45</Geometry> 
      </GeometryDrawing.Geometry> 
     </GeometryDrawing> 
    </DrawingBrush.Drawing> 
</DrawingBrush> 

Balázsの答えに示されているように、ブラシのTransformプロパティを設定し、 LineGeometry単一の垂直:

<DrawingBrush x:Key="HatchBrush" TileMode="Tile" 
       Viewport="0,0,30,30" ViewportUnits="Absolute" 
       Viewbox="0,0,30,30" ViewboxUnits="Absolute"> 
    <DrawingBrush.Transform> 
     <RotateTransform Angle="45"/> 
    </DrawingBrush.Transform> 
    <DrawingBrush.Drawing> 
     <GeometryDrawing> 
      <GeometryDrawing.Pen> 
       <Pen Brush="Black" Thickness="5"/> 
      </GeometryDrawing.Pen> 
      <GeometryDrawing.Geometry> 
       <LineGeometry StartPoint="0,15" EndPoint="30,15"/> 
      </GeometryDrawing.Geometry> 
     </GeometryDrawing> 
    </DrawingBrush.Drawing> 
</DrawingBrush> 
+0

ありがとう!魅力のように働く – Sah246

2

あなたはVisualBrush.Transform使用することができます

<VisualBrush x:Key="HatchBrushnew" 
    TileMode="Tile" 
    Viewport="0,0,30,30" 
    ViewportUnits="Absolute" 
    Viewbox="0,0,30,30"  
    ViewboxUnits="Absolute"> 
    <VisualBrush.Transform> 
     <RotateTransform Angle="135" CenterX=".5" CenterY=".5" /> 
    </VisualBrush.Transform> 
    <VisualBrush.Visual> 
     <Canvas> 
     <Path Stroke="Gray" StrokeThickness="0.1cm" > 
      <Path.Data> 
      <LineGeometry StartPoint="15,0" EndPoint="15,30" /> 
      </Path.Data> 
     </Path> 
     </Canvas> 
    </VisualBrush.Visual> 
    </VisualBrush> 

をそして結果は次のとおりです。

enter image description here

これはもう少しスパース表示され、あなたと遊ぶことができそれを修正するためのVisualBrush.Viewportの値。 135度回転しているので、間隔は実際には元の2倍の大きさです(ヒントとして使用できます)。

関連する問題