WPF 控件的缩放和移动
WPF 控件的缩放和移动
1.页面代码
<ContentControl ClipToBounds="True" Cursor="SizeAll"><Viewboxx:Name="viewbox"MouseDown="viewbox_MouseDown"MouseMove="viewbox_MouseMove"MouseWheel="Viewbox_MouseWheel"><Viewbox.RenderTransform><TransformGroup><!-- 将下面的三种转换组合到一起 --><ScaleTransform x:Name="scaler"/><TranslateTransform x:Name="transer" /></TransformGroup></Viewbox.RenderTransform><Image Name="image" Source="{Binding ImageSource, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}}" /></Viewbox></ContentControl>
ScaleTransform 用于进行缩放
TranslateTransform 用于进行位置的移动
ViewBox中可以放入不同的控件不光可以是图片
ContentControl 可以对超过容器的部分进行剪切,这样就不会覆盖到其他控件了
2.后台代码
public partial class ImageSuper : UserControl
{public ImageSuper(){InitializeComponent();}public ImageSource ImageSource{get { return (ImageSource)GetValue(ImageSourceProperty); }set { SetValue(ImageSourceProperty, value); }}public static readonly DependencyProperty ImageSourceProperty =DependencyProperty.Register("ImageSource", typeof(ImageSource), typeof(ImageSuper), null);public double Scale{get { return (double)GetValue(ScaleProperty); }set { SetValue(ScaleProperty, value); }}public static readonly DependencyProperty ScaleProperty =DependencyProperty.Register("Scale", typeof(double), typeof(ImageSuper),new PropertyMetadata(default(double), new PropertyChangedCallback(ScalePropertyChanged)));public double TranserX{get { return (double)GetValue(TranserXProperty); }set { SetValue(TranserXProperty, value); }}public static readonly DependencyProperty TranserXProperty =DependencyProperty.Register("TranserX", typeof(double), typeof(ImageSuper),new PropertyMetadata(default(double), new PropertyChangedCallback(TranserPropertyChanged)));public double TranserY{get { return (double)GetValue(TranserYProperty); }set { SetValue(TranserYProperty, value); }}public static readonly DependencyProperty TranserYProperty =DependencyProperty.Register("TranserY", typeof(double), typeof(ImageSuper),new PropertyMetadata(default(double), new PropertyChangedCallback(TranserPropertyChanged)));public static void ScalePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){(d as ImageSuper).DoScale();}public static void TranserPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){(d as ImageSuper).DoMove();}/// <summary>/// 缩放图片。最小为0.1倍,最大为0倍/// </summary>private void DoScale(){// 限制最大、最小缩放倍数if (scaler.ScaleX + Scale < 0.1 || scaler.ScaleX + Scale > 80) return;scaler.ScaleX = Scale;scaler.ScaleY = Scale;}/// <summary>/// 移动图片/// </summary>private void DoMove(){transer.X = TranserX;transer.Y = TranserY;}private void Viewbox_MouseWheel(object sender, MouseWheelEventArgs e){var point = e.GetPosition(viewbox);var delta = e.Delta * 0.002;Scale += delta;TranserX -= point.X * delta;TranserY -= point.Y * delta;}private Point lastMousePosition;private void viewbox_MouseDown(object sender, MouseButtonEventArgs e){Point currentMousePosition = e.GetPosition(image);lastMousePosition = currentMousePosition;}private void viewbox_MouseMove(object sender, MouseEventArgs e){if (e.LeftButton == MouseButtonState.Pressed){// 获取鼠标相对于图片的位置Point currentMousePosition = e.GetPosition(image);// 获取鼠标在X轴和Y轴上的移动距离double deltaX = currentMousePosition.X - lastMousePosition.X;double deltaY = currentMousePosition.Y - lastMousePosition.Y;TranserX += deltaX / 10;TranserY += deltaY / 10;}}
}
3.总结
目前这个是直接做成了第三方控件的样式使用的,还有一个旋转的属性但是因为项目不需要所有就没有加进去.还有一个自适应大小的功能就是把Scale 的值改为1,TranserX 和TranserY 的值改为0就可以了.
2023/11/20
相关文章:
WPF 控件的缩放和移动
WPF 控件的缩放和移动 1.页面代码 <ContentControl ClipToBounds"True" Cursor"SizeAll"><Viewboxx:Name"viewbox"MouseDown"viewbox_MouseDown"MouseMove"viewbox_MouseMove"MouseWheel"Viewbox_MouseWhee…...
Python and和or的优先级实例比较
Python and和or的优先级 and和or都是Python的逻辑运算符,都为保留字。通常情况下,在没有括号影响,and和or的优先级中and在代码的逻辑运算过程中会相对优先一些,及在同一行的Python代码中,and会优先与or执行。下面将通…...
数据结构与算法编程题2
逆置线性表,使空间复杂度为 O(1) #include <iostream> using namespace std;typedef int ElemType; #define Maxsize 100 #define OK 1 #define ERROR 0 typedef struct SqList {ElemType data[Maxsize];int length; }SqList;void Init_SqList(SqList& …...
Java开发者的Python快速进修指南:控制之if-else和循环技巧
简单介绍 在我们今天的学习中,让我们简要了解一下Python的控制流程。考虑到我们作为有着丰富Java开发经验的程序员,我们将跳过一些基础概念,如变量和数据类型。如果遇到不熟悉的内容,可以随时查阅文档。但在编写程序或逻辑时&…...
二进制部署k8s集群-过程中的问题总结(接上篇的部署)
1、kube-apiserver部署过程中的问题 kube-apiserver.conf配置文件更改 2、calico的下载地址 curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O 这里如果kubernetes的节点服务器为多网卡配置会产生报错 修改calino.yaml配置文件 解决方法: 调…...
IOS 关于CoreText的笔记
放大 一.CoreText计算attributeString显示所占区域 百度搜索有三种方法: 1.方法 - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(nullable NSStringDrawingContext *)context 2.使用CTFrameRef 的 CTFrameGetLin…...
基础课6——开放领域对话系统架构
开放领域对话系统是指针对非特定领域或行业的对话系统,它可以与用户进行自由的对话,不受特定领域或行业的知识和规则的限制。开放领域对话系统需要具备更广泛的语言理解和生成能力,以便与用户进行自然、流畅的对话。 与垂直领域对话系统相比…...
Hive常见的面试题(十二道)
Hive 1. Hive SQL 的执行流程 ⾸先客户端通过shell或者Beeline等⽅式向Hive提交SQL语句,之后sql在driver中经过 解析器(SQL Parser):将 SQL 字符串转换成抽象语法树 AST,这一步一般都用第三方工具库完成,比如 ANTLR&…...
1688商品详情API跨境专用接口php java
一、引言 随着全球电子商务的快速发展,跨境电子商务已经成为一种重要的国际贸易形式。1688作为全球最大的B2B电子商务平台之一,不仅拥有大量的商品资源,还为商家提供了丰富的API接口,以实现更高效、更便捷的电子商务活动。其中&a…...
h264流播放
参考文章: Android MediaCodec硬解码H264文件-CSDN博客...
02-1解析xpath
我是在edge浏览器中安装的xpath,需要安装的朋友可以参考下面这篇博客最新版edge浏览器中安装xpath插件 一、xpathd的使用 安装lxml pip install lxml ‐i https://pypi.douban.com/simple导入lxml.etree from lxml import etreeetree.parse() 解析本地文件 htm…...
Python算法——树的镜像
Python中的树的镜像算法详解 树的镜像是指将树的每个节点的左右子树交换,得到一棵新的树。在本文中,我们将深入讨论如何实现树的镜像算法,提供Python代码实现,并详细说明算法的原理和步骤。 树的镜像算法 树的镜像可以通过递归…...
ModStartCMS v7.6.0 CMS备份恢复优化,主题开发文档更新
ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议,免费且不限制商业使用。 功能特性 丰富的模块市…...
vscode 推送本地新项目到gitee
一、gitee新建仓库 1、填好相关信息后点击创建 2、创建完成后复制 https,稍后要将本地项目与此关联 3、选择添加远程存储库 4、输入仓库地址,选择从URL添加远程存储仓库 5、输入仓库名称,确保仓库名一致...
C++函数指针变量
#include <iostream> using namespace std;void MyFun(int x){cout << x << endl; }//函数指针的声明 void (*FunP) (int);/*** MyFun的函数名与FunP函数指针都是一样的,即都是函数指针* MyFun函数名是一个“函数指针常量”* FunP是一个“函数指针…...
各类语言真实性能比较列表
这篇文章是我所做或将要做的所有真实世界性能比较的索引。如果你对想要看到的其他真实世界案例有建议,请在评论中添加。 用例 1 — JWT 验证 & MySQL 查询 该用例包括: 从授权头部获取 JWT验证 JWT 并从声明中获取电子邮件使用电子邮件执行 MySQL…...
华为笔记本MateBook D 14 2021款锐龙版R7集显非触屏(NbM-WFP9)原装出厂Windows10-20H2系统
链接:https://pan.baidu.com/s/13Kyy95GME-asli4woNN_ww?pwdbqa8 提取码:bqa8 HUAWEI华为MateBookD14原厂Win10系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、华为电脑管家等预装程序...
Springboot 对于数据库字段加密方案(此方案是对字符串处理的方案)
背景:在erp开发中,有些用户比较敏感数据库里的数据比较敏感,系统给用户部署后,公司也不想让任何人看到数据,所以就有了数据库字段加密方案。 技术 spring boot mybatisplus 3.3.1 mybatisplus 实际提供了 字段加密方案 第一 他…...
[C++]:8.C++ STL引入+string(介绍)
C STL引入string(介绍) 一.STL引入:1.什么是STL2.什么是STL的版本:2-1:原始版本:2-2:P. J 版本:2-3:RW 版本:2-4:SGL版本: 3.STL 的六大组件&…...
C++基础从0到1入门编程(三)
系统学习C 方便自己日后复习,错误的地方希望积极指正 往期文章: C基础从0到1入门编程(一) C基础从0到1入门编程(二) 参考视频: 1.黑马程序员匠心之作|C教程从0到1入门编程,学习编程不再难 2.系统…...
Hackintool终极指南:三步解决黑苹果显卡、音频和USB配置难题
Hackintool终极指南:三步解决黑苹果显卡、音频和USB配置难题 【免费下载链接】Hackintool The Swiss army knife of vanilla Hackintoshing 项目地址: https://gitcode.com/gh_mirrors/ha/Hackintool 还在为黑苹果配置而烦恼吗?显卡驱动不工作、音…...
translategemma-4b-it快速入门:Ollama部署图文翻译模型,开箱即用
translategemma-4b-it快速入门:Ollama部署图文翻译模型,开箱即用 1. 认识translategemma-4b-it 1.1 什么是translategemma-4b-it translategemma-4b-it是Google基于Gemma 3架构开发的开源多模态翻译模型。与普通翻译工具不同,它不仅能处理…...
IDM开源工具免费使用指南:从安装到高级配置的完整实践
IDM开源工具免费使用指南:从安装到高级配置的完整实践 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script Internet Download Manager(IDM&am…...
避坑指南:雅特力AT32F403A V2库在Keil5中的常见配置错误及解决方法
雅特力AT32F403A V2库在Keil5中的高频配置问题与实战修复方案 当国产MCU逐渐成为嵌入式开发的新选择,雅特力AT32F403A凭借其出色的性价比获得了不少工程师的青睐。但在实际开发中,特别是在Keil5环境下使用V2库时,不少开发者都会遇到一些看似简…...
科大奥锐虚拟仿真实验避坑指南:从85分到95分,我的密度测量实验复盘与代码优化
科大奥锐虚拟仿真实验提分实战:从85分到95分的密度测量实验深度优化 第一次接触科大奥锐的密度测量虚拟仿真实验时,我和大多数同学一样,以为按照指导手册操作就能轻松拿高分。直到连续三次实验分数卡在85-87分之间,才意识到这个看…...
Pixel Fashion Atelier快速上手:非对称RPG菜单布局与像素按键交互详解
Pixel Fashion Atelier快速上手:非对称RPG菜单布局与像素按键交互详解 1. 项目概览 Pixel Fashion Atelier是一款基于Stable Diffusion与Anything-v5的图像生成工作站,它彻底改变了传统AI工具的界面设计理念。这款工具将复古日系RPG游戏的"明亮城…...
3个步骤,让猫抓帮你轻松捕获网页视频资源
3个步骤,让猫抓帮你轻松捕获网页视频资源 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经遇到过这样的情况?在网…...
国产半导体测试设备公司领军者,杭州加速科技引领产业自主可控新征程
在半导体产业国产化全面推进的背景下,国产半导体测试设备公司成为突破产业链瓶颈、保障中国芯安全的核心力量。半导体测试设备作为芯片制造关键装备,长期依赖进口,制约国内半导体产业发展。经过多年技术攻坚,一批优质国产半导体测…...
Vue3 + FFmpeg.wasm 实战:5分钟搞定浏览器端视频格式转换(附完整代码)
Vue3 FFmpeg.wasm:浏览器端视频处理的革命性方案 当现代Web应用越来越依赖多媒体处理能力时,传统依赖后端转码的方案暴露出明显短板:上传耗时、服务器压力大、隐私数据外流风险。而FFmpeg.wasm的出现彻底改变了这一局面——这个基于WebAssem…...
保姆级避坑指南:在CentOS 7上手动部署MySQL 8.0二进制包(附systemd服务配置)
CentOS 7手动部署MySQL 8.0二进制包的深度避坑指南 在Linux服务器上手动部署MySQL数据库是每个运维工程师的必修课。不同于常见的yum或apt安装方式,二进制包部署能让你更深入地理解MySQL的运行机制,同时获得更灵活的控制权。但这条路并不平坦,…...
