WPF- 그래프 종이 같은 사각형을 페인트하는 브러시를 어떻게 만들 수 있습니까?

StackOverflow https://stackoverflow.com/questions/807428

  •  03-07-2019
  •  | 
  •  

문제

수평 및 수직 축 모두에서 균등하게 간격을 둔 1 단위 두께의 라인의 규칙적이고 반복되는 그리드를 페인트하는 브러시를 어떻게 만들 수 있습니까? 그래프 용지를 상상해보십시오.

이상적으로 솔루션은 선과 배경 (사각형 내 영역)에 사용되는 브러시를 제어 할 수 있습니다. 이런 식으로 배경은 투명 할 수 있으므로 그리드가 오버레이 역할을 할 수 있습니다.

편집하다 다음은 아래의 Tom의 답변 결과를 보여주는 이미지입니다.

이 예에서 그리드는 그리드가 진정으로 투명하다는 것을 보여주기 위해 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>

다른 팁

드로잉 브러시를 사용하십시오. 도면에는 모양, 이미지, 텍스트 및 미디어가 포함될 수 있습니다.

다음 예제는 드로잉 브러시를 사용하여 사각형의 채우기를 페인트합니다.

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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top