20

水平軸と垂直軸の両方で等間隔に配置された 1 単位の太い線の規則的な繰り返しグリッドを描画するブラシを作成するにはどうすればよいでしょうか? 方眼紙を想像してみてください。

理想的には、このソリューションでは、線と背景 (正方形内の領域) に使用されるブラシを制御できます。このようにして、グリッドがオーバーレイとして機能するように、背景を透明にすることができます。

編集これは、以下のトムの回答の結果を示す画像です。

この例では、グリッドを使用して 3 つのレイヤーを合成し、グリッドが本当に透明であることを示しています。

4

4 に答える 4

26

http://msdn.microsoft.com/en-us/library/aa480159.aspxから

<DrawingBrush Viewport="0,0,10,10" 
              ViewportUnits="Absolute"
              TileMode="Tile">
  <DrawingBrush.Drawing>
    <DrawingGroup>
      <GeometryDrawing Geometry="M0,0 L1,0 1,0.1, 0,0.1Z" Brush="Green" />
      <GeometryDrawing Geometry="M0,0 L0,1 0.1,1, 0.1,0Z" Brush="Green" />
    </DrawingGroup>
  </DrawingBrush.Drawing>
</DrawingBrush>
于 2009-04-30T17:56:22.997 に答える
2

DrawingBrush を使用します。Drawing には、図形、画像、テキスト、およびメディアを含めることができます。

次の例では、DrawingBrush を使用して Rectangle の Fill をペイントします。

Rectangle exampleRectangle = new Rectangle();
exampleRectangle.Width = 75;
exampleRectangle.Height = 75;

// Create a DrawingBrush and use it to
// paint the rectangle.
DrawingBrush myBrush = new DrawingBrush();

GeometryDrawing backgroundSquare =
    new GeometryDrawing(
        Brushes.White,
        null,
        new RectangleGeometry(new Rect(0, 0, 100, 100)));

GeometryGroup aGeometryGroup = new GeometryGroup();
aGeometryGroup.Children.Add(new RectangleGeometry(new Rect(0, 0, 50, 50)));
aGeometryGroup.Children.Add(new RectangleGeometry(new Rect(50, 50, 50, 50)));

LinearGradientBrush checkerBrush = new LinearGradientBrush();
checkerBrush.GradientStops.Add(new GradientStop(Colors.Black, 0.0));
checkerBrush.GradientStops.Add(new GradientStop(Colors.Gray, 1.0));

GeometryDrawing checkers = new GeometryDrawing(checkerBrush, null, aGeometryGroup);

DrawingGroup checkersDrawingGroup = new DrawingGroup();
checkersDrawingGroup.Children.Add(backgroundSquare);
checkersDrawingGroup.Children.Add(checkers);

myBrush.Drawing = checkersDrawingGroup;
myBrush.Viewport = new Rect(0, 0, 0.25, 0.25);
myBrush.TileMode = TileMode.Tile;

exampleRectangle.Fill = myBrush;

ソース: MSDN: WPF ブラシの概要

于 2009-04-30T15:45:39.240 に答える
2

これは、VisualBrush を使用して XAML で行うことができます。出発点となるサンプルとして、VisualBrush を使用してハッチング ブラシを作成するブログ投稿を次に示します。それはグリッドに非常に近く、変換するのはかなり簡単です。

于 2009-04-30T15:47:51.077 に答える
1

左端と下端が黒の 16x16 ビットマップを使用しました。次に、ウィンドウで、それを使用するように背景をタイル状に設定しました。これが XAML です (表示するために少し変更されています)。

<Window.Background>
  <ImageBrush ImageSource="/GraphPaper;component/Background.bmp"
              Stretch="None" TileMode="Tile"
              Viewport="0,0,16,16" ViewportUnits="Absolute" />
</Window.Background>
于 2010-02-12T20:51:49.743 に答える