我有可能需要把AutoCAD的部分功能搬到浏览器上,先练习一下画直线的方法。如图:
MainPage.xaml代码:

大气象

<UserControl x:Class="DrawLine.MainPage"
    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" 
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
    
    <Canvas x:Name="panel" Background="Black" MouseLeftButtonDown="panel_MouseLeftButtonDown">
        
    </Canvas>
</UserControl>

后台:

大气象

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace DrawLine
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }
        private bool IsStart = true;//是否是起点。
        private double pX1 = 0, pY1 = 0;//起点坐标
        private double pX2 = 0, pY2 = 0;//终点坐标
        Ellipse ellipse = new Ellipse();//画起点

private void panel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Point p = e.GetPosition(sender as FrameworkElement);//取得鼠标点下的位置
            Canvas pnl = sender as Canvas;
            if (IsStart)
            {
                pX1 = p.X;//设置起点坐标
                pY1 = p.Y;
            }
            else
            {
                pX2 = p.X;//设置终点坐标
                pY2 = p.Y;
            }
            if (IsStart)//如果是起点,则画起点。
            {
                DrawPoint(pnl);
            }
            else
            {
                DrawOneLine(pnl);
            }
            IsStart = !IsStart;
        }
        //画点
        private void DrawPoint(Canvas pnl)
        {
            ellipse.Stroke = new SolidColorBrush(Color.FromArgb(255, 255, 255, 255));//动态设置Stroke属性的方法。
            ellipse.StrokeThickness = 2;
            ellipse.Width = 4;
            ellipse.Height = 4;
            Canvas.SetLeft(ellipse, pX1);//动态设置Ellipse的Canvas.Top与Canvas.Left
            Canvas.SetTop(ellipse,pY1);

pnl.Children.Add(ellipse);
        }
        //画直线
        private void DrawOneLine(Canvas pnl)
        {
            Line line = new Line();
            line.X1 = pX1;
            line.Y1 = pY1;
            line.X2 = pX2;
            line.Y2 = pY2;

line.Stroke = new SolidColorBrush(Color.FromArgb(255, 255, 255, 255));
            line.StrokeThickness = 4;

pnl.Children.Add(line);
            pnl.Children.Remove(ellipse);//删除起点。
        }
        /*参考代码,感谢小刚http://www.cnblogs.com/xiaogangqq123/
        public MainPage()
        {
            InitializeComponent();

this.MouseLeftButtonDown += new MouseButtonEventHandler(MainPage_MouseLeftButtonDown);
            this.MouseLeftButtonUp += new MouseButtonEventHandler(MainPage_MouseLeftButtonUp);
        }

private Point pointStart;
        private Path path;
        private LineGeometry lg;
        //private Point pointEnd;
        private bool IsFist = true;//记录是否第一次按下鼠标

void MainPage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            //第二次点下鼠标
            if (!IsFist)
            {
                path = new Path();
                path.Stroke = new SolidColorBrush(Colors.Red);
                path.StrokeThickness = 5;
                lg = new LineGeometry();
                lg.StartPoint = pointStart;
                lg.StartPoint = pointStart;
                path.Data = lg;
                lg.EndPoint = e.GetPosition(LayoutRoot);

LayoutRoot.Children.Add(path);
            }
            pointStart = e.GetPosition(LayoutRoot);
            IsFist = true;
        }

void MainPage_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            IsFist = false;

}
        */
    }
}

实例源码:http://files.cnblogs.com/greatverve/DrawLine.rar
环境是Silverlight 3

转载于:https://www.cnblogs.com/greatverve/archive/2010/06/09/silverlight-note-3.html

Silverlight学习笔记三(鼠标点击动态画直线|动态设置Ellipse的Canvas.Top与Canvas.Left|动态设置Stroke属性的方法。)...相关推荐

  1. SilverLight学习笔记--关于Silverlight资源文件(如:图片)的放置位置及其引用

    Silverlight中有许多资源文件,例如:图片,音频.视频,甚至XML和XAML等非执行数据文件,在Silverlight中根据资源所处位置的不同而有所区别.    资源文件可分布在我们Silve ...

  2. SilverLight学习笔记--如何在xaml文件中操作用户在后台代码定义的类(2)--示例篇:创建一个登录控件(原创)(转载本文请注明出处)...

    本文将示例如何运用前篇所写知识来建立一个用户自定义的登录控件.此控件界面非常简单,主要涉及的知识点是:   如何创建用户控件(包括对此控件的自定义事件和属性的编写,此处我们将创建一个名为LoginBo ...

  3. 【AngularJs学习笔记三】Grunt任务管理器

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...

  4. vs2010 学习Silverlight学习笔记(7):控件样式与模板

    概要: 终于知道Silverlight--App.xaml是干什么用的了,不仅可以用来封装样式(类似css),还可以制定控件模版...好强大的功能啊. 封装: 继续学习<一步一步学Silverl ...

  5. SilverLight学习笔记--Silverlight之数据绑定初探

    数据绑定(Data Binding)是用户界面UI和业务对象或其它数据提供者(data provider)的连接.用户界面对象称为目标,数据提供者成为数据源.   数据绑定帮助隔离应用程序的用户界面层 ...

  6. SilverLight学习笔记--建立Silverlight自定义控件(5)--绑定动画效果

    有了上述的基础,我们进一步完善我们的自定义控件,在此我们将创建Storyboard和前面的添加事件处理方法为我们的自定义控件加上动画效果.   1.首先,在MyDesignButton项目中进一步完善 ...

  7. SilverLight学习笔记--建立Silverlight自定义控件(1)--外观设计

    Silverlight 2 以丰富且强大可靠的控件模型闻名,该模型是平台中包括的控件和第三方控件包的基础.您也可以使用此控件模型构建自己的控件.   在了解如何为新平台编写自定义控件时,我经常先复制一 ...

  8. vs2010 学习Silverlight学习笔记(8):使用用户控件

    概要: 这个类似于封装控件样式.不过封装的是整个或是多个控件罢了,然后用的时候就可以直接引用过来了. 创建用户控: 这个也很简单,不过有几个地方需要注意下.这个就不照抄了,咱们也自己写一个. 步骤: ...

  9. SilverLight学习笔记--进一步学习Isolated Storage独立存储一(理论篇)

    在"silverlight如何在客户端读取文件"以及"silverlight如何在客户端写入文件"两篇文章中我们初步接触了Isolated Storage概念. ...

最新文章

  1. 第六篇:并发-粒度锁
  2. 新课程网上选课系统V1.0—适用于中小学校本课程选课、选修课选课
  3. 是否可以从一个static方法内部发出对非static方法的调用?
  4. 大型三甲医院管理系统源码PACS超声科室源码DICOM影像工作站
  5. DL之DeepLabv2:DeepLab v2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  6. 【NLP】ACL 2010-2020研究趋势总结
  7. 区分各浏览器的CSS hack(包括360、搜狗、opera)
  8. HTML+CSS+JS实现 ❤️创意几何love字母特效❤️
  9. 信息学奥赛一本通(1171:大整数的因子)
  10. Vue2.x总结(1)
  11. androidstudio4.1.1 build model卡主_在C++中加载PyTorch1.4的FasterRCNN模型
  12. Android-Parcelable理解与使用(对象序列化)
  13. 运算放大器权威指南(第三版)
  14. java sqlserver 图书馆管理系统_基于JAVA+SQLServer的图书馆管理系统.doc
  15. 视沃科技-大牛直播SDK
  16. 关于MAC安装windows【支持老版本】 支持安装全系列windows
  17. TokenGazer评级丨TRON:BTT众筹谋求熊市破局,生态繁荣但数据受到质疑
  18. 关于chrome、edge浏览器f12开发者模式的application中无法添加参数的问题
  19. 【PMAC】Chapter4:PMAC的C#开发
  20. OPENSSL EVP_AES部分翻译

热门文章

  1. iPhone未来怎么走?将融入脸部以及指纹辨识系统
  2. Go语言开发(九)、Go语言并发编程
  3. Shiro-从数据表中初始化资源和权限
  4. date命令使用文档.txt
  5. 最近新建了一个米表站
  6. python常见错误解决路线图
  7. Microsoft Office Communications Server 2007 R2 RTM 简体中文企业版部署速成篇之一
  8. C++11 POD 类型
  9. 共享内存+互斥量实现 Linux 进程间通信
  10. 爱的十个秘密--3.尊重的力量