C# 使用DrawingBrush创建两条垂直线
我试图创建一个50 x 50的正方形,其中一半是白色的矩形,另一半是黑色的直线垂直而不是水平。我有以下代码,但它并没有像预期的那样填充矩形。我如何使它50%白色和50%黑色C# 使用DrawingBrush创建两条垂直线,c#,wpf,C#,Wpf,我试图创建一个50 x 50的正方形,其中一半是白色的矩形,另一半是黑色的直线垂直而不是水平。我有以下代码,但它并没有像预期的那样填充矩形。我如何使它50%白色和50%黑色 System.Windows.Shapes.Rectangle swatch = new System.Windows.Shapes.Rectangle(); swatch.Width = 50; swatch.Height = 50; DrawingBrush blackBrush = new 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);
将矩形一半填充为黑色,一半填充为白色。我修改了你的代码如下。这将创建一个矩形,其中直线垂直分隔两个部分
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);
将矩形一半填充为黑色,一半填充为白色。我修改了你的代码如下。这将创建一个矩形,其中直线垂直分隔两个部分
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);
在drawingGroup中,有三个部分只是多了一个GeometryDrawing对象,这很简单。 您还可以在绘图组中配置GeometryDrawing的数量,如下所示
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);
请参阅问题的通用解决方案,该解决方案将根据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);
}
在drawingGroup中,有三个部分只是多了一个GeometryDrawing对象,这很简单。 您还可以在绘图组中配置GeometryDrawing的数量,如下所示
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);
请参阅问题的通用解决方案,该解决方案将根据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);
}
你想让你的矩形一半用白色画笔填充,一半用黑色画笔填充,对吗?你想让你的矩形一半用白色画笔填充,一半用黑色画笔填充,对吗?这对我很有用。你对如何做三行有什么见解吗?从这一点上说,我想这很容易,但我还是被卡住了。如果这解决了你的问题,请投票回答。你能提供更多关于你所说的三行的信息吗?你想在你的矩形中有三个不同的部分,或者你想在你的矩形中有三条线的平铺行为?三个不同的部分-所以它不是50/50,而是33/33/33四舍五入到100。我需要读入一些数字并动态地画出颜色。。所以我可以扩展到3以上,但我想这足以让我明白这对我来说是可行的。你对如何做三行有什么见解吗?从这一点上说,我想这很容易,但我还是被卡住了。如果这解决了你的问题,请投票回答。你能提供更多关于你所说的三行的信息吗?你想在你的矩形中有三个不同的部分,或者你想在你的矩形中有三条线的平铺行为?三个不同的部分-所以它不是50/50,而是33/33/33四舍五入到100。我需要读入一些数字并动态地画出颜色。。所以我可以扩展到3级以上,但我想这足以让我明白是谁做到了!非常感谢你!成功了!非常感谢你!