MatrixTransform 控件拖动边界检测

本文介绍了一个Silverlight项目中实现边界检测的方法。通过修改MouseMove事件处理函数,在拖动元素时限制其不超过Silverlight插件的显示区域。代码示例展示了如何根据鼠标位置更新元素的偏移量。

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

原项目演示地址 http://www.youpvp.com/misc/adorners.html
但那个项目没有加上边界检测,要加上边界检测,只需修改方法 adorned_MouseMove

void adorned_MouseMove(object sender, MouseEventArgs e)
{
    if (isDragging)
    {
        Point pt = e.GetPosition(null);//返回鼠标在整个 Silverlight 插件内容区域内的坐标位置。
        Point ee = e.GetPosition(this);//返回鼠标在当前控件内容区域内的坐标位置。
        Matrix mx = (current.RenderTransform as MatrixTransform).Matrix;
        double Height = (double)this.Parent.GetValue(ActualHeightProperty);//获取 Silverlight 插件的呈现区域的高度
        double Width = (double)this.Parent.GetValue(ActualWidthProperty);//获取 Silverlight 插件的呈现区域的宽度
        double MinX = Math.Max(ee.X, pt.X);
        double MinY = Math.Max(ee.Y, pt.Y);
        double MaxX = current.ActualWidth - ee.X + pt.X;//当前控件右边的位置
        double MaxY = current.ActualHeight - ee.Y + pt.Y;//当前控件下边的位置

        if (MaxX < Width)
        {
            mx.OffsetX += MinX - dragAnchor.X;
        }
        else
        {
            mx.OffsetX += -1;
        }
        if (MaxY < Height)
        {
            mx.OffsetY += MinY - dragAnchor.Y;
        }
        else
        {
            mx.OffsetY += -1;
        }

        //mx.OffsetX += pt.X - dragAnchor.X;
        //mx.OffsetY += pt.Y - dragAnchor.Y;
        current.RenderTransform = new MatrixTransform() { Matrix = mx };
        dragAnchor = pt;
    }
}

转载于:https://www.cnblogs.com/geass/archive/2011/04/24/2026519.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值