wpf 拖动图片,不想让Border里有余白

问题描述

/*图片放大后,拖动图片,不想让Border里有余白。换句话说,如果图片向上拖,那么一旦图片的下边和Border的下边吻合后,图片就不能再网上拖了。求教各位该怎么做*/我根据了放大陪数来判断了,还是有bug/*前台*/<Windowx:Class="WPFImagePanAndZoom.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"x:Name="WPFWindow"Title="WPFPanAndZoom"mc:Ignorable="d"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"Height="610"Width="566"><Gridx:Name="LayoutRoot"><Grid.RowDefinitions><RowDefinitionHeight="152.92"/><RowDefinitionHeight="*"/></Grid.RowDefinitions><BorderGrid.Row="1"Name="border"ClipToBounds="True"Width="800"Height="900"><ImageName="image"Opacity="1"Source="/WPF%20Image%20Pan%20and%20Zoom;component/Images/test.tif"/></Border><LabelContent="Mousewheeltozoom.Holdleftmousebuttontopan."Height="35"HorizontalAlignment="Center"Margin="123,12,128,0"Name="label1"VerticalAlignment="Top"Width="293"/></Grid></Window>/*C#*////<summary>///InteractionlogicforMainWindow.xaml///</summary>publicpartialclassMainWindow:Window{privatePointorigin;privatePointstart;publicMainWindow(){InitializeComponent();WPFWindow.MouseWheel+=MainWindow_MouseWheel;image.MouseLeftButtonDown+=image_MouseLeftButtonDown;image.MouseLeftButtonUp+=image_MouseLeftButtonUp;image.MouseMove+=image_MouseMove;}privatevoidimage_MouseLeftButtonUp(objectsender,MouseButtonEventArgse){image.ReleaseMouseCapture();}privateboolmouseDown;privatePointmouseXY;privatevoidimage_MouseMove(objectsender,MouseEventArgse){/*图片放大后,拖动图片,不想让Border里有余白。换句话说,如果图片向上拖,那么一旦图片的下边和Border的下边吻合后,图片就不能再网上拖了。求教各位该怎么做*/if(!image.IsMouseCaptured)return;Pointp=e.MouseDevice.GetPosition(border);Matrixm=image.RenderTransform.Value;doubleoffsetx=origin.X+(p.X-start.X);//m.OffsetX=origin.X+(p.X-start.X);doublec=0-(origin.X+(p.X-start.X));if(offsetx<=0&&c<=(border.Width*ScaleX))//在这里判断过可是不太行{if(c!=0){m.OffsetX=offsetx;}//transform.X+=position.X-m_PreviousMousePoint.X;}doubleOffsetY=origin.Y+(p.Y-start.Y);doubled=0-(origin.Y+(p.Y-start.Y));if(OffsetY<=0&&d<=border.Height)//在这里判断过可是不太行{m.OffsetY=OffsetY;}//m.OffsetY=origin.Y+(p.Y-start.Y);image.RenderTransform=newMatrixTransform(m);}privatevoidimage_MouseLeftButtonDown(objectsender,MouseButtonEventArgse){if(image.IsMouseCaptured)return;image.CaptureMouse();start=e.GetPosition(border);origin.X=image.RenderTransform.Value.OffsetX;origin.Y=image.RenderTransform.Value.OffsetY;}doublei=1;doubleScaleX=1;doubleScaleY=1;privatevoidMainWindow_MouseWheel(objectsender,MouseWheelEventArgse){Pointp=e.MouseDevice.GetPosition(image);Matrixm=image.RenderTransform.Value;if(e.Delta>0){i=i*2;ScaleX+=ScaleX*1.1;ScaleY+=ScaleY*1.1;m.ScaleAtPrepend(1.1,1.1,p.X,p.Y);}else{i=i/2;if(i>=1){ScaleX+=ScaleX/1.1;ScaleY+=ScaleY/1.1;m.ScaleAtPrepend(1/1.1,1/1.1,p.X,p.Y);}else{i=1;ScaleX=1;ScaleY=1;}}image.RenderTransform=newMatrixTransform(m);}}

解决方案

解决方案二:
上图吧
解决方案三:
贴出你具体要的效果图吧

时间: 2024-10-02 08:32:41

wpf 拖动图片,不想让Border里有余白的相关文章

wpf-图片放大后,拖动图片,不想让Border里有余白。Border的下边吻合后,图片就不能再网上拖了。

问题描述 图片放大后,拖动图片,不想让Border里有余白.Border的下边吻合后,图片就不能再网上拖了. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="WPFWindow" Title="WPF Pan And Zoom&q

wpf实现图片拖动缩放,新增滚动缩放 到图片原本大小就不缩放,拖动图片到边角就不拖动

问题描述 wpf实现图片拖动缩放,新增滚动缩放 到图片原本大小就不缩放,拖动图片到边角就不拖动 /// <summary> /// Interaction logic for UserControl1.xaml /// </summary> public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); WPFWindow.MouseWheel += M

avalon js实现仿微博拖动图片排序_javascript技巧

下文针对仿微博图片随意拖动,调整图片的顺序,讲解的很详细,文章肯定还有欠缺的地方,欢迎提出批评改正.废话不多说了,看具体内容吧. 点击此处进入源码下载 什么是拖动图片排序? 就像微博这种,上传后允许用户通过拖动图片,调整几张图片的顺序. 可以看到微博在这里把每张图片固定了尺寸,稍微严谨点的话,就需要像上一篇文章那样,外面是响应式的等高等宽的若干div容器,里面则是等比例缩放的响应式图片. 下面说下要求. 1.当然首先图片要可以拖动. 2.图片移出其原本的位置,拖动到目标位置并且未松开鼠标完成拖动

想将内存里的大量数据实时刷新在对话框上,用什么控件实现比较合适

问题描述 想将内存里的大量数据实时刷新在对话框上,用什么控件实现比较合适 想将内存里的大量数据实时刷新在对话框上,用什么控件实现比较合适CListCtrl,CListBox,还是CEdit 解决方案 CListCtrl,CListCtrl支持虚拟模式,也就是你不用把所有数据一次性加载到CListCtrl里,它可以只加载显示的部分,并且在用户拖动滚动条的时候才加载对应的部分. http://blog.csdn.net/love3s/article/details/8120975http://blo

Android开发之实现手指直接拖动图片移动

一.基础知识:  要实现这一效果,需要一个容器来存放Gallrey显示的图片,这里使用一个继承自BaseAdapter类的派生类来装这些图片. 我们需要监听其事件setOnItemClickListener,从而确定用户当前选中的是哪一张图片. 首先,需要将所有要显示的图片的索引存放在一个int型数组中,然后通过setImageResource方法来设置ImageView要显示的图片资源,最后将 每张图片的ImageView显示在屏幕上.   二.代码展示: 1."main.xml"

jquery实现鼠标拖动图片效果示例代码

 鼠标拖动图片的效果想必大家都有见到过吧,其实实现起来很简单的,下面使用query来实现下,感兴趣的朋友不要错过  代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/199

c++-各位大虾, 我想在程序里监视系统上运行的某些程序运行过程中是否报错异常,能实现吗? 怎么实现?

问题描述 各位大虾, 我想在程序里监视系统上运行的某些程序运行过程中是否报错异常,能实现吗? 怎么实现? 对于程序运行过程中卡死已经能检测,但是对于一些弹框类的运行出错却不知道怎么检测,请各位大虾指点迷津; 现在没有C币,如果回答是我想要的,我花钱补上 解决方案 这不就是编写一个华医生么(注:华医生是微软系统上负责处理应用程序崩溃的程序,就是你图上的"xxx已停止工作,Windows正在联机查找解决方案"),这是一个应用程序,是在用户模式下实现的,而并非在内核中实现,其实华医生也可以卸

VIEWSTATE的问题,想查看viewstate里存储的内容

问题描述 VIEWSTATE的问题,想查看viewstate里存储的内容 我想查看以下viewstate里存储的内容,但是为什么会报错?? 解决方案 这就是一个base64编码的字符串,你google"在线base64解码",把它贴进去就能看到了.

viewbinder-从网上下载的图片,想让图片圆边的显示在Listview里面。。。。

问题描述 从网上下载的图片,想让图片圆边的显示在Listview里面.... SimpleAdapter 我想用这个,不想重写Adapter 求解决方案.... 能不能通过写ListView的布局文件来让图片加载进去就是圆边? 百度了一下,说这样做,我没看懂是怎么传参的... adapter.setViewBinder(new ViewBinder() { public boolean setViewValue(View view Object data String textRepresent