码农知识堂 - 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);
    

    实现效果与上述相同。

  • 相关阅读:
    Centos7 系统下使用telnet远程登录
    常见编写JavaScript代码时容易出现的错误(3)
    springboot毕设项目社团活动网站b7rjo(java+VUE+Mybatis+Maven+Mysql)
    【LeetCode热题100】--215.数组中的第K个最大元素
    idea运行springboot时报错Process finished with exit code 1
    为什么使用C#开发软件的公司和程序员都很少?
    Hive数据定义语言-DDL-建表高阶语法(内外部、分区、分桶、事务、视图、物化视图)
    当Synchronized遇到这玩意儿,有个大坑,要注意
    2022人工智能顶会时间序列论文汇总
    Scala入门教程
  • 原文地址:https://www.cnblogs.com/mingupupu/p/18137691
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号