WPF获取相对位置、坐标的方法
1.获取鼠标在控件中的坐标:
1 private void item_MouseDown(object sender, MouseButtonEventArgs e) 2 { 3 Point point = e.GetPosition(lbl); 4 5 } 6 7 //或者直接使用Mouse类的静态方法GetPosition(), 8 //需要注意的是参数为IInputElement类型,也就是说要是能输入的控件 9 Point point2 = Mouse.GetPosition(lbl2); 10 lbl2.Content = "(" + point2.X + ", " + point2.Y + ")";
完整例子代码:
XAML代码
1 <Window x:Class="WpfGetPointDemo.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 Title="MainWindow" Height="350" Width="525"> 5 <Grid x:Name="grid" MouseDown="item_MouseDown"> 6 <Label Background="Red" x:Name="lbl" Margin="293.855,59.398,66.145,77.319"/> 7 <Label Background="GreenYellow" x:Name="lbl2" Margin="29.488,59.398,327.512,69.969"/> 8 <Label Background="blue" x:Name="lbl3" HorizontalAlignment="Left" Margin="133.048,268.187,0,0" VerticalAlignment="Top" Width="250.952" Height="51.813"/> 9 <Button x:Name="btn" HorizontalAlignment="Left" Margin="177.325,10,0,0" VerticalAlignment="Top" Width="135.09" RenderTransformOrigin="0.012,0.547" Height="43.252"/> 10 </Grid> 11 </Window>
后台C#代码
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Windows; 6 using System.Windows.Controls; 7 using System.Windows.Data; 8 using System.Windows.Documents; 9 using System.Windows.Input; 10 using System.Windows.Media; 11 using System.Windows.Media.Imaging; 12 using System.Windows.Navigation; 13 using System.Windows.Shapes; 14 15 namespace WpfGetPointDemo 16 { 17 /// <summary> 18 /// Interaction logic for MainWindow.xaml 19 /// </summary> 20 public partial class MainWindow : Window 21 { 22 public MainWindow() 23 { 24 InitializeComponent(); 25 } 26 27 private void item_MouseDown(object sender, MouseButtonEventArgs e) 28 { 29 Point point = e.GetPosition(lbl); 30 lbl.Content = "("+point.X+", "+point.Y+")"; 31 32 Point point2 = Mouse.GetPosition(lbl2); 33 lbl2.Content = "(" + point2.X + ", " + point2.Y + ")"; 34 35 Point point3 = Mouse.GetPosition(grid); 36 lbl3.Content = "(" + point3.X + ", " + point3.Y + ")"; 37 38 Point point4 = Mouse.GetPosition(btn); 39 btn.Content = "(" + point4.X + ", " + point4.Y + ")"; 40 } 41 } 42 }
运行结果:
2.获取控件相对于两一个控件的坐标:
2.1. 直接使用 control1.TranslatePoint(new Point(), control2)
1 Point point = rectangle.TranslatePoint(new Point(),canvas); 2
2.2.获取控件在Window中的坐标
1 Window window = Window.GetWindow(canvas); 2 Point point = canvas.TransformToAncestor(window).Transform(new Point(0, 0));

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java并发编程之原子变量
原子变量最主要的一个特点就是所有的操作都是原子的,synchronized关键字也可以做到对变量的原子操作。只是synchronized的成本相对较高,需要获取锁对象,释放锁对象,如果不能获取到锁,还需要阻塞在阻塞队列上进行等待。而如果单单只是为了解决对变量的原子操作,建议使用原子变量。关于原子变量的介绍,主要涉及以下内容: 原子变量的基本概念 通过AtomicInteger了解原子变量的基本使用 通过AtomicInteger了解原子变量的基本原理 AtomicReference的基本使用 使用FieldUpdater操作非原子变量的字段属性 经典的ABA问题的解决 一、原子变量的基本概念 原子变量保证了该变量的所有操作都是原子的,不会因为多线程的同时访问而导致脏数据的读取问题。我们先看一段synchronized关键字保证变量原子性的代码: 简单的count++操作,线程对象首先需要获取到Counter 类实例的对象锁,然后完成自增操作,最后释放对象锁。整个过程中,无论是获取锁还是释放锁都是相当消耗成本的,一旦不能获取到锁,还需要阻塞当前线程等等。 对于这种情况,我们可以将coun...
- 下一篇
Android学习——手把手教你实现Android热修复
版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u013132758。 https://blog.csdn.net/u013132758/article/details/80954639 前言 最近一段时间看了一些关于Android热修复的知识,比如Andfix,Tinker,Sophix等,看了这些框架的原理,就想着自己能不能手撸一个简单的demo。下面我们就来自己动手实现Android热修复吧。 热修复实现原理 所谓热修复就是,在我们应用上线后出现小bug需要及时修复时,不用再发新的安装包,只需要发布补丁包,在客户不知不觉之间修复掉bug,JAVA虚拟机JVM在运行时,加载的是.classes的字节码文件。而Android也有自己的虚拟机Dalvik/ART虚拟机,不过他们加载的是dex文件,但是他们的工作原理都一样,都是经过ClassLoader类加载器。Android在ClassLoader的基础上又定义类PathClassLoader和DexClassLoader,两者都继承自BaseDexClassLoader,下面我们看下他们间的区别...
相关文章
文章评论
共有0条评论来说两句吧...