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