首页 文章

Drawing上的DrawingContext DrawGeometry(wpf)

提问于
浏览
1

我尝试以编程方式在我的WPF项目中绘制一个带圆角的矩形 . 我'm pretty new to WPF and trying to figure out how drawing works since it'与WinForms有很大的不同 . 我正在使用>this< link作为圆角矩形方法(我的方法与该网站上的方法相同) . 这是我的代码:

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);

这是我在画布上的输出:

enter image description here

不是我真正想要的;)那里不应该有任何文字开头 .

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

edit

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

3 回答

  • 0
    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);
    
  • 0

    使用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:

    <Canvas x:Name="canvas"/>
    
  • 1

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

    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);
    

    这是一种欺骗(因为它不是一个矩形),但它的工作原理 . 这是我的结果:

    enter image description here

相关问题