Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 ADO.NET JavaScript LINQ AjaxPro DataGridView 面向对象 Extjs GridView XML DevExpress HTML教程 Oracle jQuery 分页 GDI+ Visual C++2010 MySQL Office2010 WPF MVC Dojo WCF4.0 VB.NET Sql2005 textbox cookie WCF WinForm Discuz!NT SQL经典语句 T-SQL checkbox ASPxGridView F# asp.net SQL VS2008新特性 DropDownList Access TreeView Ajax VS2008 页面执行时间 Flex 字符串 回调 VB2005 DataSet C#时间 ASP.NET性能优化 用户在线检测 动画
当前位置: 主页 > Silverlight >

SilverLight中鼠标的基本操作

时间:2010-08-14 08:35来源:未知 作者:admin 点击:

SilverLight中鼠标的基本操作

1. 事件路由

在Silverlight中,提供了事件路由,使得我们可以在父节点上接收和处理来自于子节点的事件,

Silverlight中的路由事件采用了冒泡路由策略。

在鼠标事件中MouseLeftButtonDown 、MouseLeftButtonUp 、MouseMove三个事件都支持路由事件,而MouseEnter、MouseLeave两个事件不支持

 

前台代码:

  <Canvas x:Name="ParentCanvas" Background="#404610"  Grid.Row="0" Grid.Column="1">

            <Rectangle x:Name="RecA" Fill="Orange" Stroke="White" StrokeThickness="2"

               Canvas.Top="40" Canvas.Left="60"

               Width="160" Height="100"/>

            <Rectangle x:Name="RecB" Fill="LightBlue" Stroke="White" StrokeThickness="2"

               Canvas.Top="40" Canvas.Left="240"

               Width="160" Height="100"/>

            <TextBlock x:Name="Status" Foreground="White" Text="Status"

               Canvas.Left="100" Canvas.Top="200"/>

        </Canvas>

 

ParentCanvas.MouseLeftButtonDown += new MouseButtonEventHandler(ParentCanvas_MouseLeftButtonDown);

private void ParentCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

        {

            String msg = "x:y = " + e.GetPosition(sender as FrameworkElement).ToString();

            msg += " from " + (e.OriginalSource as FrameworkElement).Name;

            Status.Text = msg;

        }

 

2.拖动

好像TextBlock 和 Rectangle 等图形类的就可以拖,可是如果是Button等控件类的就拖不动。还不知道为什么。

前台代码:

<Canvas Background="#46401F"   Grid.Row="1" Grid.Column="0">

            <Rectangle               

            MouseLeftButtonDown="OnMouseDown"

            MouseMove="OnMouseMove"

            MouseLeftButtonUp="OnMouseUp"   

            Fill="Orange" Stroke="White" StrokeThickness="2"

               Canvas.Top="40" Canvas.Left="60"

               Width="160" Height="100"/>

 

            <TextBlock Text="TextBlock" Width="50" Height="40" Canvas.Top="10" Canvas.Left="60"   Foreground="Blue"

            MouseLeftButtonDown="OnMouseDown" 

            MouseMove="OnMouseMove"

            MouseLeftButtonUp="OnMouseUp"   

                       ></TextBlock>

 

            <Button x:Name="btnWelcome" 

            MouseLeftButtonDown="OnMouseDown"

            MouseMove="OnMouseMove"

            MouseLeftButtonUp="OnMouseUp"

               

           Canvas.Left="50" Canvas.Top="150" Background="Red"

           FontSize="18"

           Width="160" Height="80">

 

            </Button>

        </Canvas>

 

后台代码:

bool trackingMouseMove = false;

        Point mousePosition;

 

        protected void OnMouseDown(object sender, MouseButtonEventArgs e)

        {

            FrameworkElement element = sender as FrameworkElement;

            mousePosition = e.GetPosition(null);

            trackingMouseMove = true;

            if (null != element)

            {

                element.CaptureMouse();

                element.Cursor = Cursors.Hand;

            }

        }

        protected void OnMouseMove(object sender, MouseEventArgs e)

        {

            if (trackingMouseMove)

            {

                FrameworkElement element = sender as FrameworkElement;

 

                double deltaV = e.GetPosition(null).Y - mousePosition.Y;

                double deltaH = e.GetPosition(null).X - mousePosition.X;

                double newTop = deltaV + (double)element.GetValue(Canvas.TopProperty);

                double newLeft = deltaH + (double)element.GetValue(Canvas.LeftProperty);

 

                element.SetValue(Canvas.TopProperty, newTop);

                element.SetValue(Canvas.LeftProperty, newLeft);

 

                mousePosition = e.GetPosition(null);

            }

        }

        protected void OnMouseUp(object sender, MouseButtonEventArgs e)

        {

            FrameworkElement element = sender as FrameworkElement;

            trackingMouseMove = false;

            element.ReleaseMouseCapture();

 

            mousePosition.X = mousePosition.Y = 0;

            element.Cursor = null;

        }

(责任编辑:admin)
Tags:Silverlight
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价