Silverlight事件之鼠标拖动(二)

本文介绍如何在Silverlight中实现鼠标拖动圆形元素的功能。通过XAML代码定义UI界面,并利用C#后端代码捕获鼠标事件,实现椭圆随鼠标移动的效果。文章详细解释了MouseMove、MouseLeftButtonDown及MouseLeftButtonUp事件处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Silverlight中实现鼠标拖动效果

XAML代码:

<Grid x:Name="LayoutRoot" Background="White">
<Canvas Background="AliceBlue">
<Ellipse MouseMove="Ellipse_MouseMove"
MouseLeftButtonDown="Ellipse_MouseLeftButtonDown"
MouseLeftButtonUp="Ellipse_MouseLeftButtonUp" Canvas.Left="50"
Canvas.Top="50" Width="120" Height="120" Fill="Gold" Stroke="Black"
StrokeThickness="3"/>
<TextBlock x:Name="tbkpos" FontSize="26"/>
</Canvas>
</Grid>
</UserControl>


后台代码:

        private void Ellipse_MouseMove(object sender, MouseEventArgs e)
        {
            FrameworkElement element = sender as FrameworkElement;
            if (isMouseMoving)
            {
                double currX = e.GetPosition(null).X - currentPostion.X;
                double currY = e.GetPosition(null).Y - currentPostion.Y;
                element.SetValue(Canvas.TopProperty,currY+(double)element.GetValue(Canvas.TopProperty));
                element.SetValue(Canvas.LeftProperty,currX+(double)element.GetValue(Canvas.LeftProperty));
                tbkpos.Text = "Ellipse当前坐标:"+currentPostion.X.ToString()+","+currentPostion.Y.ToString();
                currentPostion = e.GetPosition(null);
            }
        }
        //鼠标左键按下
        private void Ellipse_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            FrameworkElement element = sender as FrameworkElement;
            currentPostion = e.GetPosition(null);
            isMouseMoving = true;
            if (element != null)
            {
                //将鼠标设置为UIElement,开始捕捉鼠标位置
                element.CaptureMouse();
                element.Cursor = Cursors.Hand;
            }
        }
        private void Ellipse_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            FrameworkElement element = sender as FrameworkElement;
            isMouseMoving = false;
            element.ReleaseMouseCapture();//停止捕捉鼠标位置
            currentPostion.X = 0;
            currentPostion.Y = 0;
            element.Cursor = null;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值