2014-10-09 3 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

ответ

2

Его простое, чтобы иметь три секции, имеет только один объект GeometryDrawing в вашей группе чертежей. , вы также можете настроить количество геометрий, которое будет показано в вашей группе чертежей, как показано ниже.

См. Общее решение проблемы, которое будет отображать горизонтальные сечения в соответствии с значением 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

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

+1

Если это решило вашу проблему, пожалуйста, поддержите ответ. Можете ли вы предоставить дополнительную информацию о том, что вы подразумеваете под тремя строками? вам нужны три разных раздела в вашем прямоугольнике или вы хотите иметь поведение плитки в 3 строках в вашем прямоугольнике? – jadavparesh06

+1

Три разных раздела - поэтому вместо 50/50 это что-то вроде 33/33/33 (округлено до 100, конечно). Мне нужно читать в некоторых номерах и динамически рисовать цвета .. так что я мог бы масштабироваться до более 3, но я думаю, этого было бы достаточно для меня, чтобы понять это. – Yecats

Смежные вопросы