SilverLight中鼠标的基本操作

SilverLight中鼠标的基本操作

 

1. 事件路由

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

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

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

 

前台代码:

  <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;

        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值