码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • WPF基础:在Canvas上绘制图形


    合集 - C#(29)
    1.使用C#将几个Excel文件合并去重分类2023-11-152.C#使用SqlSugar操作MySQL数据库实现简单的增删改查2023-11-163.C#中的类和继承2023-11-174.C#中的virtual和override关键字2023-11-175.C#中的属性2023-11-206.C#winform中使用SQLite数据库2023-11-237.C#简化工作之实现网页爬虫获取数据2023-11-278.C#中的委托(一)2023-11-299.C#中的ref关键字2023-11-2910.C#中out关键字2023-11-2911.C#中内置的泛型委托Func与Action2023-12-0412.在winform blazor hybrid中绘图2023-12-1313.使用C#如何监控选定文件夹中文件的变动情况?2023-12-2814.C#设计模式之策略模式01-0215.由浅入深理解C#中的事件01-0416.C#设计模式之观察者模式01-0417.C#设计模式之单例模式01-0818.C#基于ScottPlot进行可视化01-1319.C#使用MiniExcel导入导出数据到Excel/CSV文件02-1020.winform实现最小化至系统托盘02-1921.C#使用Bogus生成测试数据02-2722.SemanticKernel如何基于自有数据聊天03-0523.在winform中如何嵌入第三方软件窗体✨03-0724.在winform中如何实现双向数据绑定?03-1825.自己动手做一个批量doc转换为docx文件的小工具03-2026.WPF中动画教程(DoubleAnimation的基本使用)04-0127.WPF动画教程(PointAnimationUsingPath的使用)04-0328.C#使用PaddleOCR进行图片文字识别✨04-09
    29.WPF基础:在Canvas上绘制图形04-16
    收起

    Canvas介绍

    Canvas是WPF(Windows Presentation Foundation)中的一种面板控件,用于在XAML中布置子元素。它提供了绝对定位的能力,允许元素在自由的二维空间中放置。Canvas上的子元素可以通过指定绝对位置(Left和Top属性)来放置,也可以使用附加属性来指定相对于Canvas的位置。Canvas对于需要自由布局的场景非常有用,例如绘图应用程序或需要精确放置UI元素的情况。但是,使用Canvas布局时要注意,它不会自动调整子元素的位置或大小,因此需要手动管理子元素的布局。

    image-20240416085443415

    在Canvas上绘制矩形

    在xaml定义一个Canvas:

     
        
            
                
            
            
                

    效果如下所示:

    image-20240416085838561

    绘制矩形:

     System.Windows.Shapes.Rectangle rectangle = new System.Windows.Shapes.Rectangle
     {
         Width = 100,
         Height = 100,
         Stroke = System.Windows.Media.Brushes.Blue,
         StrokeThickness = 1,                                      
     };
    
     Canvas.SetLeft(rectangle, 50);
     Canvas.SetTop(rectangle, 50);
    
     myCanvas1.Children.Add(rectangle);
    

    System.Windows.Shapes.Rectangle

    System.Windows.Shapes.Rectangle是WPF(Windows Presentation Foundation)中的一个类,它表示一个矩形图形。

    image-20240416093429075

    以下是Rectangle类的一些主要属性:

    属性名 类型 描述
    Width Double 获取或设置元素的宽度。
    Height Double 获取或设置元素的建议高度。
    Stroke Brush 获取或设置 Brush,用于指定 Shape 边框绘制的方式。
    StrokeThickness Double 获取或设置 Shape边框的宽度。
    Fill Brush 获取或设置 Brush,它指定形状内部上色的方式。
     Canvas.SetLeft(rectangle, 50);
     Canvas.SetTop(rectangle, 50);
    

    这两行代码是在设置Rectangle对象在Canvas中的位置。

    1. Canvas.SetLeft(rectangle, 50);:这行代码设置了rectangle对象在Canvas中的左边距。SetLeft是一个静态方法,它接受两个参数:第一个参数是要设置位置的对象,第二个参数是左边距的值。在这个例子中,rectangle对象的左边距被设置为50像素。
    2. Canvas.SetTop(rectangle, 50);:这行代码设置了rectangle对象在Canvas中的上边距。SetTop也是一个静态方法,它的工作方式与SetLeft相同,只是它设置的是上边距而不是左边距。在这个例子中,rectangle对象的上边距被设置为50像素。
     myCanvas1.Children.Add(rectangle);
    

    这行代码将矩形添加到Canvas中。myCanvas1是Canvas的名称,Children.Add方法将矩形添加到Canvas的子元素中。

    实现效果:

    image-20240416094336410

    也可以直接在xaml中写:

     
         
     
    

    效果与上述相同。

    在Canvas上绘制圆

    xaml写法:

     "Azure" x:Name="myCanvas1" Height="400">
         "100" Height="100" Fill="Blue" Canvas.Left="50" Canvas.Top="50"/>
     
    

    实现效果:

    image-20240416094913617

    cs写法:

     System.Windows.Shapes.Ellipse ellipse = new System.Windows.Shapes.Ellipse
     {
         Width = 100,
         Height = 100,                
         Fill = System.Windows.Media.Brushes.Blue
     };
    
     Canvas.SetLeft(ellipse, 50);
     Canvas.SetTop(ellipse, 50);
    
     myCanvas1.Children.Add(ellipse);
    

    实现效果与上述相同。

    在Canvas上绘制折线

    xaml写法:

    
        
    
    

    实现效果:

    image-20240416095915008

    cs写法:

     // 创建Polyline对象
     Polyline polyline = new Polyline();
     polyline.Points = new PointCollection()
     {
         new System.Windows.Point(10, 10),
         new System.Windows.Point(50, 50),
         new System.Windows.Point(100, 20),
         new System.Windows.Point(150, 70)
     };
     polyline.Stroke = System.Windows.Media.Brushes.Blue;
     polyline.StrokeThickness = 2;
    
     myCanvas1.Children.Add(polyline);
    

    实现效果与上述相同。

    在Canvas上绘制多边形

    xaml写法:

     
        
    
    

    实现效果:

    image-20240416101250384

    cs写法:

     // 创建Polygon对象
     Polygon polygon = new Polygon();
     polygon.Points = new PointCollection()
     {
         new System.Windows.Point(350, 200),
         new System.Windows.Point(250, 100),
         new System.Windows.Point(300, 250)
     };
     polygon.Fill = System.Windows.Media.Brushes.Red;
     polygon.Stroke = System.Windows.Media.Brushes.Blue;
     polygon.StrokeThickness = 2;
    
     myCanvas1.Children.Add(polygon);
    

    实现效果与上述相同。

    在Canvas上绘制自定义路径

    xaml写法:

    
        
            
                
                    
                        
                        
                        
                    
                
            
        
    
    

    实现效果:

    image-20240416101923692

    cs写法:

    // 创建Path对象
    Path path = new Path();
    path.Stroke = System.Windows.Media.Brushes.Blue;
    path.StrokeThickness = 2;
    
    // 创建PathGeometry对象
    PathGeometry pathGeometry = new PathGeometry();
    
    // 创建PathFigure对象
    PathFigure pathFigure = new PathFigure();
    pathFigure.StartPoint = new System.Windows.Point(10, 10);
    
    // 创建LineSegment对象并添加到PathFigure
    pathFigure.Segments.Add(new LineSegment(new System.Windows.Point(50, 50), true));
    pathFigure.Segments.Add(new LineSegment(new System.Windows.Point(100, 20), true));
    pathFigure.Segments.Add(new LineSegment(new System.Windows.Point(150, 70), true));
    
    // 将PathFigure添加到PathGeometry
    pathGeometry.Figures.Add(pathFigure);
    
    // 设置Path的Data属性为PathGeometry对象
    path.Data = pathGeometry;
    
    // 将path添加到myCanvas1中
    myCanvas1.Children.Add(path);
    

    实现效果与上述相同。

  • 相关阅读:
    【流行框架】Dubbo
    【小程序源码】看成语猜古诗句好玩解闷小游戏
    PIE-engine 教程 ——影像集合的使用for循环函数(北京市NDVI计算)
    区块链≠绿色?波卡或成 Web3“生态环保”标杆
    贪心算法之加油问题
    关于安卓jsbridge的使用
    云备份——服务器业务处理模块以及网络通信模块
    【Pytorch with fastai】第 14 章 :ResNet
    GZ038 物联网应用开发赛题第5套
    好消息,完整版的jwt鉴权机制来了呦
  • 原文地址:https://www.cnblogs.com/mingupupu/p/18137691
  • 最新文章
  • 【FHE】我们如何实现同态加密推理(八):SiLU 的密文化——两条路径,和一个 8 字节的开关
    SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
    不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
    Halo插件:支持GitHub的图床附件策略
    电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
    华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
    软件更好写之后口碑会更重要
    大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
    Java标签跳转:一个鲜为人知但却很实用的小技巧
    多智能体系统论文速读
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号