2014-10-09 90 views
1

我正在尝试创建一个50 x 50的正方形,其中一半是矩形白色,另一半是黑色(垂直线而不是水平线)。我有以下代码,但不是按预期填充矩形。我如何制作50%的白色和50%的黑色?使用DrawingBrush创建两条垂直线

System.Windows.Shapes.Rectangle swatch = new System.Windows.Shapes.Rectangle(); 
swatch.Width = 50; 
swatch.Height = 50; 

DrawingBrush blackBrush = new DrawingBrush(); 
GeometryDrawing backgroundSquare = new GeometryDrawing(System.Windows.Media.Brushes.White,null,new RectangleGeometry(new Rect(25, 0, 50, 50))); 
GeometryGroup gGroup = new GeometryGroup(); 
gGroup.Children.Add(new RectangleGeometry(new Rect(25, 0, 100, 100))); 
GeometryDrawing checkers = new GeometryDrawing(new SolidColorBrush(Colors.Black), null, gGroup); 

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

blackBrush.Drawing = checkersDrawingGroup; 

blackBrush.Viewport = new Rect(0, 0, 0.25, 0.25); 
blackBrush.TileMode = TileMode.Tile; 

swatch.Fill = blackBrush; 

sp_Thumbnails.Children.Add(swatch); 
+1

你想让你的矩形用白色笔刷填充一半,用黑色笔刷填充一半吗? – jadavparesh06 2014-10-09 04:07:47

回答

2

它很简单,有三个部分只是在您的drawingGroup中有一个GeometryDrawing对象。 您还可以配置GeometryDrawing的数量将在您的drawingGroup中存在,如下所示。

请参阅针对您的问题的通用解决方案,该解决方案将根据groupCount值显示水平部分。

public void CreateRectangle(int groupCount) 
     { 
      Rectangle swatch = new System.Windows.Shapes.Rectangle(); 
      swatch.Width = 50; 
      swatch.Height = 50; 
      double groupsize = 100/groupCount; 
      DrawingBrush blackBrush = new DrawingBrush(); 
      DrawingGroup checkersDrawingGroup = new DrawingGroup(); 
      //Considering 3 as groupCount 
      List<SolidColorBrush> brushes = new List<SolidColorBrush>() { Brushes.Black, Brushes.White,Brushes.Red }; 
      double location = 0; 
      for (int i = 0; i < groupCount; i++) 
      {     
       GeometryDrawing drawing = new GeometryDrawing(brushes[i] , null, 
        new RectangleGeometry(new Rect(0, location,groupsize,groupsize))); 
       checkersDrawingGroup.Children.Add(drawing); 
       location += groupsize; 
      } 
      blackBrush.Drawing = checkersDrawingGroup; 
      swatch.Fill = blackBrush; 

      brdrect.Children.Add(swatch); 
     } 
+0

这样做!非常感谢! – Yecats 2014-10-09 04:53:33

2

用黑色和半白色填充矩形的一半。我修改了你的代码如下。这将创建一个矩形,其中的线条垂直分隔两个部分。

Rectangle swatch = new System.Windows.Shapes.Rectangle(); 
      swatch.Width = 50; 
      swatch.Height = 50; 

      DrawingBrush blackBrush = new DrawingBrush(); 
      GeometryDrawing backgroundSquare = new GeometryDrawing(Brushes.White, null, 
       new RectangleGeometry(new Rect(0, 0, 25, 25))); 
      GeometryGroup gGroup = new GeometryGroup(); 
      gGroup.Children.Add(new RectangleGeometry(new Rect(25, 0, 25, 25))); 
      GeometryDrawing checkers = new GeometryDrawing(Brushes.Black, null, gGroup); 

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

      blackBrush.Drawing = checkersDrawingGroup;    
      swatch.Fill = blackBrush; 

      brdrect.Children.Add(swatch); 

如果你希望你的部分将被拼接水平,那么你就需要在上面的代码一些变化。 只需修改矩形图创建部分如下。

GeometryDrawing backgroundSquare = new GeometryDrawing(Brushes.White, null, 
       new RectangleGeometry(new Rect(0, 0, 25, 25))); 
      GeometryGroup gGroup = new GeometryGroup(); 
      gGroup.Children.Add(new RectangleGeometry(new Rect(0, 25, 25, 25))); 
      GeometryDrawing checkers = new GeometryDrawing(Brushes.Black, null, gGroup); 
+1

这适用于我。你有没有对如何做3条线的任何见解?我从这个角度思考这很容易,但我仍然陷入困境。 – Yecats 2014-10-09 04:17:31

+1

如果这解决了您的问题,请提出答案。你能提供一些关于三条线的含义的更多信息吗?你想在你的矩形中有三个不同的部分,或者你想在你的矩形中有3行的瓷砖行为? – jadavparesh06 2014-10-09 04:24:39

+1

三个不同的部分 - 所以而不是50/50像33/33/33(当然舍入到100)。我需要阅读一些数字并动态地绘制颜色..所以我可以扩展到3以上,但我认为这足以让我找出结果 – Yecats 2014-10-09 04:26:07