Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用DrawingBrush创建两条垂直线_C#_Wpf - Fatal编程技术网

C# 使用DrawingBrush创建两条垂直线

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(

我试图创建一个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();
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级以上,但我想这足以让我明白是谁做到了!非常感谢你!成功了!非常感谢你!