Pergunta

Como se pode criar uma escova que tintas uma grade regular e repetida de linhas grossas 1-unit espaçados uniformemente em ambos os eixos horizontal e vertical? Imagine o papel de gráfico, se você quiser.

Idealmente a solução permitiria o controle sobre as escovas utilizadas para as linhas e o fundo (as regiões dentro dos quadrados). Desta forma, o fundo poderia ser transparente, de modo que a rede poderia servir como uma sobreposição.

Editar Aqui está uma imagem que mostra o resultado da resposta de Tom abaixo:

Para este exemplo uma grade foi usado para compostos de três camadas para mostrar que a grade é verdadeiramente transparente.

Foi útil?

Solução

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>

Outras dicas

Use um DrawingBrush. Um desenho pode conter formas, imagens, texto, e meios de comunicação.

O exemplo a seguir usa um DrawingBrush para pintar o preenchimento de um retângulo.

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;

Fonte: MSDN: WPF Brushes Overview

Você pode fazer isso em XAML usando um VisualBrush. Como uma amostra para dar-lhe um ponto de partida, aqui é um post blog que usa VisualBrush para criar um pincel chocado. É muito perto de uma grade -. E seria bastante fácil de se converter em toda

Eu usei um bitmap 16x16 com a esquerda e inferior preto. Então, em minha janela, eu definir o fundo de usar que, lado a lado. Aqui está o XAML (ligeiramente alterada para mostrar-se).

<Window.Background>
  <ImageBrush ImageSource="/GraphPaper;component/Background.bmp"
              Stretch="None" TileMode="Tile"
              Viewport="0,0,16,16" ViewportUnits="Absolute" />
</Window.Background>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top