本文实例讲述了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;
}
/// <summary>
/// 调试信息
/// </summary>
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");
}
/// <summary>
/// 调整右侧大图的位置
/// </summary>
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);
}
}
}
更多关于C#相关内容感兴趣的读者可查看本站专题:《C#图片操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》
希望本文所述对大家C#程序设计有所帮助。
# silverlight
# 图片
# 局部放大
# WPF实现图片合成或加水印的方法【2种方法】
# 深入分析WPF客户端读取高清图片卡以及缩略图的解决方法详解
# Silverlight将图片转换为byte的实现代码
# Silverlightbutton图片切换样式实例代码
# C#实现图片放大功能的按照像素放大图像方法
# C# 实现的图片盖章功能
# 支持拖拽、旋转、放缩、保存
# C#图片按比例缩放的实现代码
# c#图片缩放图片剪切功能实现(等比缩放)
# WPF/Silverlight实现图片局部放大的方法分析
# 程序设计
# 拖动
# 都有
# 相关内容
# 鼠标
# 感兴趣
# 数据结构
# 给大家
# 前几天
# 更多关于
# 所述
# 长宽
# 使用技巧
# 面向对象
# 所必需
# 小图
# 京东
# 操作技巧
# 大图片
# 讲述了
相关文章:
定制建站流程步骤详解:一站式方案设计与开发指南
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
ppt制作免费网站有哪些,ppt模板免费下载网站?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何高效生成建站之星成品网站源码?
如何高效完成独享虚拟主机建站?
音乐网站服务器如何优化API响应速度?
建站之星收费标准详解:套餐费用及年费价格表一览
模具网站制作流程,如何找模具客户?
如何快速生成专业多端适配建站电话?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何获取PHP WAP自助建站系统源码?
如何用免费手机建站系统零基础打造专业网站?
如何确认建站备案号应放置的具体位置?
如何做网站制作流程,*游戏网站怎么搭建?
实现虚拟支付需哪些建站技术支撑?
如何基于云服务器快速搭建个人网站?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
Swift中循环语句中的转移语句 break 和 continue
子杰智能建站系统|零代码开发与AI生成SEO优化指南
小型网站制作HTML,*游戏网站怎么搭建?
如何设计高效校园网站?
XML的“混合内容”是什么 怎么用DTD或XSD定义
宝塔新建站点报错如何解决?
建站之星3.0如何解决常见操作问题?
上海网站制作开发公司,上海买房比较好的网站有哪些?
C#如何使用XPathNavigator高效查询XML
佛山企业网站制作公司有哪些,沟通100网上服务官网?
简历在线制作网站免费版,如何创建个人简历?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
早安海报制作网站推荐大全,企业早安海报怎么每天更换?
如何打造高效商业网站?建站目的决定转化率
宁波自助建站系统如何快速打造专业企业网站?
装修招标网站设计制作流程,装修招标流程?
如何安全更换建站之星模板并保留数据?
高端建站三要素:定制模板、企业官网与响应式设计优化
Bpmn 2.0的XML文件怎么画流程图
常州企业建站如何选择最佳模板?
简单实现Android验证码
网站设计制作公司地址,网站建设比较好的公司都有哪些?
如何通过商城自助建站源码实现零基础高效建站?
实例解析angularjs的filter过滤器
如何选择高效稳定的ISP建站解决方案?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
盘锦网站制作公司,盘锦大洼有多少5G网站?
建站之星×万网:智能建站系统+自助建站平台一键生成
如何快速搭建安全的FTP站点?
*请认真填写需求信息,我们会在24小时内与您取得联系。