WPF-方眼紙のような正方形を描くブラシを作成するにはどうすればよいですか?
質問
水平軸と垂直軸の両方に均等に間隔を空けた1単位の太い線の規則的な繰り返しグリッドをペイントするブラシを作成するにはどうすればよいですか?グラフ用紙を想像してみてください。
理想的には、このソリューションでは、線と背景(正方形内の領域)に使用されるブラシを制御できます。このようにして、グリッドをオーバーレイとして使用できるように、背景を透明にすることができます。
編集以下は、トムの回答の結果を示す画像です。
この例では、グリッドを使用して3つのレイヤーを合成し、グリッドが本当に透明であることを示しています。
解決
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>
他のヒント
DrawingBrushを使用します。図面には、図形、画像、テキスト、およびメディアを含めることができます。
次の例では、DrawingBrushを使用して四角形の塗りつぶしをペイントします。
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ブラシの概要
VisualBrushを使用してXAMLでこれを行うことができます。出発点を示すサンプルとして、こちらはブログ投稿で、VisualBrushを使用してハッチングされたブラシを作成します。グリッドに非常に近い-変換はかなり簡単です。
左端と下端が黒の16x16ビットマップを使用しました。次に、ウィンドウで、タイルを使用して背景を設定します。 これがXAMLです(表示されるように少し変更されています)。
<Window.Background>
<ImageBrush ImageSource="/GraphPaper;component/Background.bmp"
Stretch="None" TileMode="Tile"
Viewport="0,0,16,16" ViewportUnits="Absolute" />
</Window.Background>
所属していません StackOverflow