silverlight canvas 鼠标拖动canvas

silverlight canvas 鼠标拖动canvas,第1张

概述本节举一个例子,该示例与本书第六章的示例程序大致相同,示例程序运行效果如图所示。 示例中的两个图形分别包含在两个子画布中,这两个子画布共享相同的事件处理器,分别是MouseLeftButtonDown、MouseMove和MouseLeftButtonUp事件,XAML代码如下所示。 <Canvas x:Name="parentCanvas"         xmlns="http://schem 本节举一个例子,该示例与本书第六章的示例程序大致相同,示例程序运行效果如图所示。

示例中的两个图形分别包含在两个子画布中,这两个子画布共享相同的事件处理器,分别是MouseleftbuttonDownMouseMoveMouseleftbuttonUp事件,XAML代码如下所示。

<Canvas x:name="parentCanvas"

        xmlns="http://schemas.microsoft.com/clIEnt/2007"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Loaded="Page_Loaded"

        x:Class="DragandDropDemo.Page;assembly=ClIEntBin/DragandDropDemo.dll"

        WIDth="640"

        Height="480"

        Background="White"

        >

  <!-- 定义两个圆形对象,形成一个圆环效果-->

  <Canvas

    MouseleftbuttonDown="onMouseDown"

    MouseleftbuttonUp="onmouseup"

    MouseMove="onMouseMove"

    Canvas.top="20" Canvas.left="50">

    <Ellipse

      Height="100" WIDth="100"

      Fill="Gold"

      stroke="Black" strokeThickness="4" />

    <Ellipse

      Height="50" WIDth="50"

      Canvas.top="25" Canvas.left="25"

      Fill="Black" />

  </Canvas>

  <!-- 定义一个钻石形状 -->

  <Canvas

    MouseleftbuttonDown="onMouseDown"

    MouseleftbuttonUp="onmouseup"

    MouseMove="onMouseMove"

    Canvas.top="140" Canvas.left="100">

    <!--使用旋转渐变让该画布旋转45度-->

    <Canvas.Rendertransform>

      <Rotatetransform Angle="45" />

    </Canvas.Rendertransform> 

    <Rectangle

      Height="100" WIDth="100"

      Fill="Coral"

      stroke="Black" strokeThickness="4" />

  </Canvas>

</Canvas>

上面的代码很简单的画了两个图形,分别位于两个画布中,拖动的实际代码如下所示。

using System;

using System.windows;

using System.windows.Controls;

using System.windows.documents;

using System.windows.Ink;

using System.windows.input;

using System.windows.Media;

using System.windows.Media.Animation;

using System.windows.Shapes;

namespace DragandDropDemo

{

    public partial class Page : Canvas

    {

        //beginX和beginY用于保存鼠标上一次的位置

        private double beginX;

        private double beginY;

        //isMouseDown获取和设置鼠标是否按下的布尔变量

        private bool isMouseDown = false;

        public voID Page_Loaded(object o,EventArgs e)

        {

            // required to initialize variables

            InitializeComponent();

        }

        //鼠标左键按下时的事件代码

        public voID onMouseDown(object sender,MouseEventArgs e)

        {

            //将当前的鼠标位置传给私有变量

            beginX = e.Getposition(null).X;

            beginY = e.Getposition(null).Y;

            //将isMouseDown设为true表示鼠标按下。

            isMouseDown = true;

            //由于CaptureMouse都定义在UIElement中,所以这里、转换为UIElement类

            ((UIElement)sender).CaptureMouse();

        }

        //鼠标移动

        public voID onMouseMove(object sender,MouseEventArgs e)

        {

            //如果鼠标处理按下状态

            if (isMouseDown == true)

            {

                //获取鼠标当前位置

                double currX = e.Getposition(null).X;

                double currY = e.Getposition(null).Y;

                //获取当前图形的位置

                double currleft = (double)((UIElement)sender).GetValue(Canvas.leftProperty);

                double currtop = (double)((UIElement)sender).GetValue(Canvas.topProperty);

                //移动当前图形的位置

((UIElement)sender).SetValue(Canvas.leftProperty,currleft + currX - beginX);

                ((UIElement)sender).SetValue(Canvas.topProperty,currtop + currY - beginY);

                //将当前位置保存起来,继续拖动

                beginX = currX;

                beginY = currY;

            }

        }

        //释放鼠标左键

        public voID onmouseup(object sender,MouseEventArgs e)

        {           

            isMouseDown = false;

            //停止鼠标捕捉

            ((UIElement)sender).ReleaseMouseCapture();

        }

    }

}

来源于http://blog.csdn.net/silverlightria/article/details/2323740

总结

以上是内存溢出为你收集整理的silverlight canvas 鼠标拖动canvas全部内容,希望文章能够帮你解决silverlight canvas 鼠标拖动canvas所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1069345.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存