当前位置: 首页 > news >正文

WPF draw triangle and add contextmenu, menuitem programmatically

 private void DrawTriangleInCanvas(){try{triangle = new Polygon(){Stroke = Brushes.Black,StrokeThickness = 3,Fill = Brushes.Red};double height = (Math.Sqrt(3) / 2) * sideLength;Point centerPt = new Point(cvs.ActualWidth / 2, cvs.ActualHeight / 2);Point topPt = new Point(centerPt.X, cvs.ActualHeight / 2 - height / 2);Point leftPt = new Point(centerPt.X - sideLength / 2, centerPt.Y + height / 2);Point rightPt = new Point(centerPt.X + sideLength / 2, centerPt.Y + height / 2);triangle.Points.Add(leftPt);triangle.Points.Add(rightPt);triangle.Points.Add(topPt);AddContextMenuWithTriangle(triangle);cvs.Children.Add(triangle);}catch (Exception ex){MessageBox.Show(ex.Message);}}private void AddContextMenuWithTriangle(Polygon triangle){ContextMenu cxt = new ContextMenu();MenuItem saveMenuItem = new MenuItem();saveMenuItem.Header = "Save";saveMenuItem.Click += (s, e) =>{SaveMenuItemMethod();};MenuItem removeMenuItem = new MenuItem();removeMenuItem.Header = "Delete";removeMenuItem.Click += (s, e) =>{DeleteMenuItemMethod();};cxt.Items.Add(saveMenuItem);cxt.Items.Add(removeMenuItem);triangle.ContextMenu = cxt;}private void DeleteMenuItemMethod(){MessageBox.Show("In Delete MenuItem!");}private void SaveMenuItemMethod(){MessageBox.Show($"In Save MenuItem!");}

 

 

 

 

image

 

 

 

image

 

 

 

 

 

image

 

 

 

 

 

image

 

//Window.xaml
<Window x:Class="WpfApp16.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp16"mc:Ignorable="d"WindowState="Maximized"Title="MainWindow" Height="450" Width="800"><Grid><Canvas x:Name="cvs"Background="White"HorizontalAlignment="Stretch"VerticalAlignment="Stretch"/></Grid>
</Window>//Window.xaml.cs
using System.Runtime.CompilerServices;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;namespace WpfApp16
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{Polygon triangle = null;double sideLength = 100.0d;public MainWindow(){InitializeComponent();this.Loaded += MainWindow_Loaded;}private void MainWindow_Loaded(object sender, RoutedEventArgs e){DrawTriangleInCanvas();}private void DrawTriangleInCanvas(){try{triangle = new Polygon(){Stroke = Brushes.Black,StrokeThickness = 3,Fill = Brushes.Red};double height = (Math.Sqrt(3) / 2) * sideLength;Point centerPt = new Point(cvs.ActualWidth / 2, cvs.ActualHeight / 2);Point topPt = new Point(centerPt.X, cvs.ActualHeight / 2 - height / 2);Point leftPt = new Point(centerPt.X - sideLength / 2, centerPt.Y + height / 2);Point rightPt = new Point(centerPt.X + sideLength / 2, centerPt.Y + height / 2);triangle.Points.Add(leftPt);triangle.Points.Add(rightPt);triangle.Points.Add(topPt);AddContextMenuWithTriangle(triangle);cvs.Children.Add(triangle);}catch (Exception ex){MessageBox.Show(ex.Message);}}private void AddContextMenuWithTriangle(Polygon triangle){ContextMenu cxt = new ContextMenu();MenuItem saveMenuItem = new MenuItem();saveMenuItem.Header = "Save";saveMenuItem.Click += (s, e) =>{SaveMenuItemMethod();};MenuItem removeMenuItem = new MenuItem();removeMenuItem.Header = "Delete";removeMenuItem.Click += (s, e) =>{DeleteMenuItemMethod();};cxt.Items.Add(saveMenuItem);cxt.Items.Add(removeMenuItem);triangle.ContextMenu = cxt;}private void DeleteMenuItemMethod(){MessageBox.Show("In Delete MenuItem!");}private void SaveMenuItemMethod(){MessageBox.Show($"In Save MenuItem!");}}
}

 

http://www.gsyq.cn/news/13113.html

相关文章:

  • 使用 SignalR 向前端推送图像
  • 隐私保护与联邦学习文献阅读
  • Java实习模拟面试|离散数学|概率论|金融英语|数据库实战|职业规划|期末冲刺|今日本科计科要闻速递:技术分享与学习指南 - 实践
  • 2025.9.27
  • 四则运算和验证码
  • 第一次课动手动脑合集
  • smartctl on FreeBSD: Please specify device type with the -d option.
  • prefect
  • 课后作业1-3
  • 实用指南:clsx:高效处理 React 条件类名的实用工具
  • 课后作业2(动手动脑,课后实验性问题)
  • 从零开始构建图注意力网络:GAT算法原理与数值实现详解
  • 分解原则编写
  • iSCSI网络存储——基于VM17下麒麟V10SP1与SP2的共享配置
  • CSP-S1 2025
  • 金币
  • 【阿里DeepResearch】写作组件WebWeaver详解 - 指南
  • 完整教程:PostgreSQL 知识体系
  • 加密货币技术革命:揭秘数字复兴时代
  • 对于烧烤签子的钢材担忧
  • day20_修改 删除功能
  • Linux环境之----POSIX信号量
  • 完整教程:Flink 容错从状态后端到 Exactly-Once
  • Java语法基础课程动手动脑及课后实验问题整理文档
  • 安装包制作流程-final
  • 一般路人向第39次CSP认证
  • 完整教程:微论-神经网络的亲情密码,权重矩阵的家庭关系论
  • Ansible + Docker 部署 Apache Nifi 1.28 单用户集群
  • Godot Outline
  • SentinelOne与MITRE ATTCK企业版2025评估的深度解析