首页 > 其他分享 >基于WPF实现简单放大镜效果

基于WPF实现简单放大镜效果

时间:2022-12-30 21:22:44浏览次数:67  
标签:基于 MagnifierCircle 放大镜 image Canvas WPF Ellipse

原文网址:https://www.jb51.net/article/271074.htm

WPF 如何实现简单放大镜

框架使用.NET40

Visual Studio 2019;

实现此功能需要用到 VisualBrush ,放大镜展现使用 Canvas -> Ellipse .

  • 可以使用 VisualBrush 创建放大效果。
  • 设置 Visual 获取或设置画笔的内容。
  • 设置 ViewboxUnits Absolute 坐标系与边界框无关。
  • 设置 Viewbox 获取或设置 TileBrush 图块中内容的位置和尺寸。
  • 当鼠标移动获取当前坐标点修改 VisualBrush 的 Viewbox
  • 鼠标移动修改 Ellipse 的 Canvas.Left 与 Canvas.Top 跟随鼠标。

实现代码

1) xaml 代码如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <Grid>         <Image Source="0.png" Stretch="Fill"                Name="image" MouseMove="image_MouseMove"                MouseEnter="image_MouseEnter" MouseLeave="image_MouseLeave"/>           <Canvas IsHitTestVisible="False" Name="MagnifierPanel">             <Ellipse Stroke="LightBlue" Name="MagnifierCircle"                       Height="200" Width="200">                 <Ellipse.Fill>                     <VisualBrush x:Name="MagnifierBrush"                                    Visual="{Binding ElementName=image}"                                   ViewboxUnits="Absolute"/>                 </Ellipse.Fill>             </Ellipse>         </Canvas>     </Grid>

2) xaml.cs 代码如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 private void image_MouseMove(object sender, MouseEventArgs e)         {             var center = e.GetPosition(image);             var length = MagnifierCircle.ActualWidth * _factor;             var radius = length / 2;             var viewboxRect = = new Rect(center.X - radius, center.Y - radius, length, length);             MagnifierBrush.Viewbox = viewboxRect;             MagnifierCircle.SetValue(Canvas.LeftProperty, center.X - MagnifierCircle.ActualWidth / 2);             MagnifierCircle.SetValue(Canvas.TopProperty, center.Y - MagnifierCircle.ActualHeight / 2);           }           private void image_MouseEnter(object sender, MouseEventArgs e)         {             MagnifierCircle.Visibility = Visibility.Visible;         }           private void image_MouseLeave(object sender, MouseEventArgs e)         {             MagnifierCircle.Visibility = Visibility.Hidden;         }

效果图

到此这篇关于基于WPF实现简单放大镜效果的文章就介绍到这了,更多相关WPF放大镜内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:  

标签:基于,MagnifierCircle,放大镜,image,Canvas,WPF,Ellipse
From: https://www.cnblogs.com/bruce1992/p/17015834.html

相关文章

  • C#开发PACS医学影像处理系统(十九):Dicom影像放大镜
    原文网址:https://www.cnblogs.com/Uncle-Joker/p/13690862.html在XAML代码设计器中,添加canvas画布与圆形几何对象,利用VisualBrush笔刷来复制画面内容到指定容器:<Canvas......
  • 【c#】分享一个简易的基于时间轮调度的延迟任务实现
        在很多.net开发体系中开发者在面对调度作业需求的时候一般会选择三方开源成熟的作业调度框架来满足业务需求,比如Hangfire、Quartz.NET这样的框架。但是有些时......
  • 基于AI边缘智能网关的工业质检应用
    成品质量检验是工业生产最后必不可少的环节,随着我国工业化的蓬勃发展,工业产品日益迈向高端化、精密化,对于工业产品的质量检验要求和投入成本也在不断提高,产品质检涉及到比......
  • wpf后台设置image
    img_backpic.Source=newBitmapImage(newUri(path,UriKind.RelativeOrAbsolute));UriKind有3种类型:RelativeOrAbsolute/Absolute/Relative,这里测试用了RelativeOrAbs......
  • 基于边缘智能网关的智能售货机应用
    自动售货机是生活中很常见的商业基础设施,已经广泛部署在商圈、公园、写字楼等场景,为公众提供便利的零售服务。近年来随着物联网技术的发展,自动售货机的智能化水平也需要不......
  • m基于matlab的站点休眠中继CDMA网络动态节能控制算法仿真与性能分析
    1.算法概述蜂窝网络不仅需要能够为用户提供高质量的语音服务,而且要能够提供大量的数据传输服务,这就决定了蜂窝网络的发展必须要进一步提高系统容量和高速数据速率覆盖,而传......
  • m基于matlab的站点休眠中继CDMA网络动态节能控制算法仿真与性能分析
    1.算法概述      蜂窝网络不仅需要能够为用户提供高质量的语音服务,而且要能够提供大量的数据传输服务,这就决定了蜂窝网络的发展必须要进一步提高系统容量和高速数据......
  • WPF中使用EventHandler更新UI内容
    在WPF中,EventHandler类似于一套订阅与发布的操作。甲方提供一个event的回调注册入口让乙方来订阅自己发布的event。这么理解起来就是需要发布消息的一方定义event(就像是C语......
  • Tomcat 8.x基于Redis Session会话保持
    什么是Redis?Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。一、与其他用户状态保存方案比较一般开......
  • 基于LNMP架构部署NextCloud私有云盘
    一、NextCloud介绍1、简介Nextcloud是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的云同步网盘,从而实现跨平台跨设备文件同步、共享、版本......