栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

silverlight图片局部放大效果

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

silverlight图片局部放大效果

很多购物平台中(比如京东购物),浏览产品详情时都有这种效果,前几天看到有朋友问SL能不能实现,当然可以 

   

 

界面:

1.左侧小图片(用一个矩形Fill一张图片即可)
2.左侧半透明矩形
3.右侧大图片(用一个Canvas设置Clip裁剪可视区域作为蒙板,图片放置在Canvas中即可)

 

原理:

获取左侧半透明矩形的相对位置,然后动态调整右侧大图的Canvas.Left与Canvas.Top

 

需要知道以下技术点:
1.Clip的应用
2.如何拖动对象
3.拖动时的边界检测
4.动态调整对象的Canvas.Left与Canvas.Top属性

 

尺寸要点:

1.右侧大图可视区域与左侧半透明矩形的“长宽比例”应该相同
2.“图片原始尺寸长度比” 应该 “与左侧小图片长度比”相同
3.图片原始大小/左侧小图大小 = 右侧可视区域大小/半透明矩形大小

 

关键代码:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace PartMagnifier
{
    public partial class MainPage : UserControl
    {
        bool trackingMouseMove = false;
        Point mousePosition;
        public MainPage()
        {
            // 为初始化变量所必需
            InitializeComponent();
        }
        private void LayoutRoot_Loaded(object sender, System.Windows.RoutedEventArgs e)
        {
            Adjust();
        }
        private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            frameworkElement element = sender as frameworkElement;
            mousePosition = e.GetPosition(element);
            trackingMouseMove = true;
            if (null != element)
            {
                element.CaptureMouse();
                element.Cursor = Cursors.Hand;
            }
            Adjust();
            Debug();
            sb.Begin();//标题动画,可去掉
        }
        private void Rectangle_MouseMove(object sender, MouseEventArgs e)
        {
            frameworkElement element = sender as frameworkElement;
            if (trackingMouseMove)
            {
                double deltaV = e.GetPosition(element).Y - mousePosition.Y;
                double deltaH = e.GetPosition(element).X - mousePosition.X;
                double newTop = deltaV + (double)element.GetValue(Canvas.TopProperty);
                double newLeft = deltaH + (double)element.GetValue(Canvas.LeftProperty);
                if (newLeft <= 10)
                {
                    newLeft = 10;
                }
                if (newLeft >= 130)
                {
                    newLeft = 130;
                }
                if (newTop <= 10) { newTop = 10; }
                if (newTop >= 85) { newTop = 85; }
                element.SetValue(Canvas.TopProperty, newTop);
                element.SetValue(Canvas.LeftProperty, newLeft);
                mousePosition = e.GetPosition(element);
                Adjust();
                if (mousePosition.X <= 0 || mousePosition.Y <= 0) { return; }
                Debug();
            }
        }
        private void Rectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            frameworkElement element = sender as frameworkElement;
            trackingMouseMove = false;
            element.ReleaseMouseCapture();
            mousePosition.X = mousePosition.Y = 0;
            element.Cursor = null;
        }
        /// 
        /// 调试信息
        /// 
        void Debug()
        {
          txtResult.Text = "鼠标相对坐标:" + mousePosition.ToString() + "n小框left:" + rect.GetValue(Canvas.LeftProperty) + ",
         小框top:" + rect.GetValue(Canvas.TopProperty) + "n大图left:" + ((double)img.GetValue(Canvas.LeftProperty)).ToString("F0") +
          ",大图right:" + ((double)img.GetValue(Canvas.TopProperty)).ToString("F0");
        }
        /// 
        /// 调整右侧大图的位置
        /// 
        void Adjust()
        {
            
            double n = cBig.Width / rect.Width;
            double left = (double)rect.GetValue(Canvas.LeftProperty) - 10;
            double top = (double)rect.GetValue(Canvas.TopProperty) - 10;
            double newLeft = -left * n;
            double newTop = -top * n;
            img.SetValue(Canvas.LeftProperty, newLeft);
            img.SetValue(Canvas.TopProperty, newTop);
        }
    }
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/231655.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号