Frage

Wie könnte ich eine Bürste erstellen, die ein regelmäßiger, wiederholt Raster von 1-Einheit dicker Linien gleichmäßig in den horizontalen und vertikalen Achsen angeordnet malt? Stellen Sie sich vor Millimeterpapier, wenn man so will.

Idealerweise würde die Lösung der Kontrolle über die für die Leitungen und den Hintergrund (in den Quadraten die Regionen) verwendeten Bürsten ermöglichen. Auf diese Weise könnte der Hintergrund transparent sein, so dass das Gitter als Overlay dienen könnte.

Bearbeiten Hier ist ein Bild, das das Ergebnis von Toms Antwort zeigt:

Für dieses Beispiel eines Gitter zu Verbund drei Schichten verwendet wurde, um zu zeigen, dass das Gitter wirklich transparent ist.

War es hilfreich?

Lösung

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>

Andere Tipps

Verwenden Sie einen DrawingBrush. Eine Zeichnung kann Formen, Bilder, Texte und Medien enthalten.

Das folgende Beispiel ein DrawingBrush verwendet das Füllen eines Rectangle zu malen.

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;

Quelle: MSDN: WPF Bürsten Übersicht

Sie können dies in XAML tun, um eine VisualBrush verwenden. Als ein Beispiel, das Ihnen einen Ausgangspunkt zu geben, hier ist eine Blog-Post die VisualBrush verwendet einen schraffierte Pinsel zu erstellen. Es ist sehr nahe an einem Raster -. Und wäre relativ einfach zu konvertieren über

Ich habe ein 16x16 Bitmap mit der linken und unteren Rand schwarz. Dann in meinem Fenster, habe ich den Hintergrund zu verwenden, die, mit Ziegeln gedeckt. Hier ist die XAML (leicht verändert zu zeigen).

<Window.Background>
  <ImageBrush ImageSource="/GraphPaper;component/Background.bmp"
              Stretch="None" TileMode="Tile"
              Viewport="0,0,16,16" ViewportUnits="Absolute" />
</Window.Background>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top