首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >画布上的DrawingContext DrawGeometry

画布上的DrawingContext DrawGeometry
EN

Stack Overflow用户
提问于 2016-10-03 17:52:26
回答 3查看 2.8K关注 0票数 1

我尝试以编程方式在我的WPF项目中绘制带有圆角的矩形。我对WPF非常陌生,并试图弄清楚绘图是如何工作的,因为它与WinForms有很大的不同。我使用>this<链接的圆角矩形方法(我的方法是相同的网站)。这是我的代码:

代码语言:javascript
复制
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));
}

ContentPresenter content = new ContentPresenter();
content.Content = drawingVisual;
previewcanvas.Children.Add(content);

这是我在画布上的输出:

并不是我所期望的那样;)首先不应该有任何文本。

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

编辑

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-03 18:15:02

代码语言:javascript
复制
        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);
票数 1
EN

Stack Overflow用户

发布于 2016-10-03 18:06:12

使用RadiusX和RadiusY:

代码语言:javascript
复制
  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:

代码语言:javascript
复制
  <Canvas x:Name="canvas"/>
票数 0
EN

Stack Overflow用户

发布于 2016-10-04 07:09:02

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

代码语言:javascript
复制
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);

这是一种欺骗(因为它不是矩形),但它能工作。以下是我的结果:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39837561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档