微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐