首页 > 其他分享 >wpf draw rectangle with mouse

wpf draw rectangle with mouse

时间:2024-03-28 16:24:37浏览次数:21  
标签:draw Windows System cvs Cvs using wpf mouse rect

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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 WpfApp22
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        Canvas cvs;
        Point leftTopPt;
        Point rightDownPt;
        Shape currentShape;
        Rectangle rect;
        bool isDrawing = false;

        public MainWindow()
        {
            WindowState = WindowState.Maximized;
            InitializeComponent();
            Loaded += delegate
            {
                InitCvs(); 
            };
        }

        private void InitCvs()
        {
            cvs = new Canvas();
            cvs.Width = this.ActualWidth;
            cvs.Height = this.ActualHeight;
            cvs.Background = new SolidColorBrush(Colors.White);
            cvs.MouseDown += Cvs_MouseDown;
            cvs.MouseMove += Cvs_MouseMove;
            cvs.MouseUp += Cvs_MouseUp;
            this.Content = cvs;
        }

        private void Cvs_MouseUp(object sender, MouseButtonEventArgs e)
        {
            if (isDrawing)
            {
                rightDownPt = e.GetPosition(cvs);
                DrawRectangle();
                isDrawing = false;
                cvs.ReleaseMouseCapture();
            }
        }

        private void Cvs_MouseMove(object sender, MouseEventArgs e)
        { 
        }

        private void Cvs_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (!isDrawing)
            {
                leftTopPt = e.GetPosition(cvs);
                isDrawing = true;
            }
            else if (isDrawing)
            {
                rightDownPt = e.GetPosition(cvs);
            }
            cvs.CaptureMouse();
        }

        private void DrawRectangle()
        {
            rect = new Rectangle();
            rect.Width = rightDownPt.X - leftTopPt.X;
            rect.Height = rightDownPt.Y - leftTopPt.Y;
            rect.Fill = new SolidColorBrush(Colors.Red);
            rect.Stroke = new SolidColorBrush(Colors.Black);
            rect.StrokeThickness = 5;
            Canvas.SetLeft(rect, leftTopPt.X);
            Canvas.SetTop(rect, leftTopPt.Y);
            cvs.Children.Add(rect);
            this.Content = cvs;
        }
    }
}

 

标签:draw,Windows,System,cvs,Cvs,using,wpf,mouse,rect
From: https://www.cnblogs.com/Fred1987/p/18101979

相关文章

  • 可能是迄今为止最好用的WPF加载动画功能(没有之一)
    前言当我们在开发应用程序时,用户体验往往是至关重要的一环。在应用程序加载大量数据或执行复杂操作时,为用户提供一个良好的加载体验变得至关重要。加载动画是其中一个有效的方式,它不仅能够告知用户应用程序正在进行工作,还能够缓解用户在等待过程中的焦虑感。一.需求分析 ......
  • [C#] [WPF] MVVMToolkit入门案例心得
    跟着做的第一个MVVM项目,学到一点基础的东西,记下来;有些用词不准确假设我们要做一个页面,通过按钮来控制上方文本框的文字,通过勾选框来控制按钮的激活状态⬇️一般流程需要3个属性,2个私有属性,1个RelayCommand属性代表按钮点击后事件,并配有相应的getter/setter文本......
  • 记一次WPF的DataGrid绑定数据
    之前一直在用winform,但是感觉界面不好看,然后就自己在网上学习WPF。一开始看到DataGrid的时候,还以为它是DataGridView,然后用winform的方法绑定数据发现不行,在不断的查找之后,终于学会了怎么简单的绑定数据。工具:VStudio2022框架:.netframework4.8新建一个WPF窗体,再把DataGrid拖......
  • 【wpf】ListBoxItemIndexConverter转换器listbox序号自更新
    publicclassListBoxItemIndexConverter:IMultiValueConverter{publicobjectConvert(object[]values,TypetargetType,objectparameter,CultureInfoculture){stringindexPrefix=null;if(parameter!=null&&parameter......
  • WPF解决当ScrollViewer中嵌套ItemsControl时,不能使用鼠标来滚动翻页
    1.在DataGrid中添加PreviewMouseWheel事件,并将事件的Handled属性设置为false,以便将滚动事件传递给ScrollViewer。示例代码如下:<DataGridPreviewMouseWheel="DataGrid_PreviewMouseWheel"><!--DataGrid的其他设置--></DataGrid>privatevoidDataGrid_PreviewMouseWh......
  • 将a-drawer修改为notification组件
    效果图源码<template> <div> <a-drawer placement="right" :closable="true" width="560" :visible="visible" :after-visible-change="afterVisibleChange" @close="onClose"......
  • WPF StringFormat在Label控件无效
    在WPF程序设计时,若使用Label控件绑定数据后StringFormat进行格式化显示时发现设定的StringFormat无效,但TextBlock控件中使用StringFormat显示正常,导致Label控件StringFormat失败的根本原因在于Label控件的Content属性是一个object对象,Binding.StringFormat仅作用于string类型属性......
  • 【wpf】 枚举转bool转换器
    ///<summary>///枚举转bool///</summary>publicclassEnum2BooleanConverter:IValueConverter{publicobjectConvert(objectvalue,TypetargetType,objectparameter,CultureInfoculture){returnva......
  • WPF自定义Panel:让拖拽变得更简单
       在WPF应用程序中,拖放操作是实现用户交互的重要组成部分。通过拖放操作,用户可以轻松地将数据从一个位置移动到另一个位置,或者将控件从一个容器移动到另一个容器。然而,WPF中默认的拖放操作可能并不是那么好用。为了解决这个问题,我们可以自定义一个Panel来实现更简单的拖......
  • WPF中自定义按钮实现最大化最小化动画过度效果
    需要使用WindowsAPI[DllImport("user32.dll",EntryPoint="SetWindowLong")]privatestaticexternintSetWindowLong32(HandleRefhWnd,intnIndex,intdwNewLong);[DllImport("user32.dll",EntryPoint="SetWindowLongPtr"......