C# DrawingContext画布上的DrawGeometry(wpf)

C# DrawingContext画布上的DrawGeometry(wpf),c#,wpf,canvas,C#,Wpf,Canvas,我尝试在WPF项目中以编程方式绘制一个圆角矩形。我对WPF还很陌生,因为它与WinForms有很大的不同,所以我试图弄清楚绘图是如何工作的。我正在使用 不是我所期望的;)这里不应该有任何文字作为开头 希望有人能帮我画出圆角矩形 编辑 一些额外的信息,我需要能够设置每个角。使用RadiusX和RadiusY: rect = new Rectangle { Stroke = Brushes.Red, StrokeThickness

我尝试在WPF项目中以编程方式绘制一个圆角矩形。我对WPF还很陌生,因为它与WinForms有很大的不同,所以我试图弄清楚绘图是如何工作的。我正在使用

不是我所期望的;)这里不应该有任何文字作为开头

希望有人能帮我画出圆角矩形

编辑


一些额外的信息,我需要能够设置每个角。

使用RadiusX和RadiusY:

  rect = new Rectangle
        {
            Stroke = Brushes.Red,
            StrokeThickness = 2,
            Width = 100,
            Height = 100,
            RadiusX = 25,
            RadiusY = 25
        };
        Canvas.SetLeft(rect, startPoint.X);
        Canvas.SetTop(rect, startPoint.X);
        canvas.Children.Add(rect);
Xaml:


搜索之后,我找到了一个更简单的解决方案:

Border border = new Border();

border.BorderThickness = new Thickness(2);
border.CornerRadius = new CornerRadius(5,15,25,35);
border.BorderBrush = (SolidColorBrush)(new BrushConverter().ConvertFrom("#000"));
border.Background = (SolidColorBrush)(new BrushConverter().ConvertFrom("#000"));
border.Width = 100;
border.Height = 100;
border.Margin = new Thickness(10);

previewcanvas.Children.Add(border);
这是一种欺骗(因为它不是长方形),但它是有效的。以下是我的结果:


我认为应该使用
RenderTargetBitmap
渲染视觉效果,然后应该将
RenderTargetBitmap
指定给
Image.Source
。然后你应该将
图像
添加到
画布
。这不允许我设置每个单独的角点(这是必要的),而这正是你需要的:工作起来像个符咒,但我想知道这是否是在图像中绘制图像,然后在屏幕上绘制图像的“正确方式”,如果这有意义的话。
  <Canvas x:Name="canvas"/>
        Rect rect = new Rect();
        rect.Width = Width - BorderSize;
        rect.Height = Height - BorderSize;
        DrawingVisual drawingVisual = new DrawingVisual();
        using (var draw = drawingVisual.RenderOpen())
        {
            DrawRoundedRectangle(draw, new SolidColorBrush(Color.FromRgb(0, 0, 0)),
            new Pen(new SolidColorBrush(Color.FromRgb(0, 0, 0)), BorderSize), rect, new CornerRadius(5, 5, 5, 5));
        }
        RenderTargetBitmap rtb = new RenderTargetBitmap(rect.Width, rect.Height, 96, 96, PixelFormats.Default);
        rtb.Render(drawingVisual);
        Image image = new Image();
        image.Source = rtb;
        previewcanvas.Children.Add(image);
Border border = new Border();

border.BorderThickness = new Thickness(2);
border.CornerRadius = new CornerRadius(5,15,25,35);
border.BorderBrush = (SolidColorBrush)(new BrushConverter().ConvertFrom("#000"));
border.Background = (SolidColorBrush)(new BrushConverter().ConvertFrom("#000"));
border.Width = 100;
border.Height = 100;
border.Margin = new Thickness(10);

previewcanvas.Children.Add(border);