WPF如何得到一个在用户控件内部的元素的坐标位置
例如有这样一个用户控件:
<UserControl d:DesignHeight="100" d:DesignWidth="200" ...><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="100" /><ColumnDefinition Width="100" /></Grid.ColumnDefinitions><Ellipse Name="leftEllipse" Grid.Column="0" Width="50" Height="50" HorizontalAlignment="Center" VerticalAlignment="Center" Fill="Red" /><Ellipse Name="rightEllipse" Grid.Column="1" Width="50" Height="50" HorizontalAlignment="Center" VerticalAlignment="Center" Fill="Green" /></Grid> </UserControl>
这是主窗口:
<Window ...><Canvas Name="canvas1"><my:MyUserControl x:Name="myUserControl1" Width="200" Height="100" Canvas.Top="100" Canvas.Left="100" /></Canvas> </Window>
我们知道,可以通过下面的方法得到用户控件本身的坐标位置:
double x = Canvas.GetLeft(myUserControl1);
那么如何得到用户控件内部的元素的坐标呢?要知道,当用户控件本身应用了变换(如:RotateTransform),其内部元素的坐标是会改变的。
解决这个问题有两个方法:
//方法1:
在用户控件中编写方法:
public GeneralTransform LeftEllipseTransform(UIElement e) {return leftEllipse.TransformToAncestor(e); }
在主窗口中调用:
var p = myUserControl1.LeftEllipseTransform(canvas1).Transform(new Point()); //得到左圆的左上角坐标
//方法2:
在用户控件中编写方法:
public Point GetLeftEllipsePosition(Point p, UIElement e) {return leftEllipse.TranslatePoint(p, e); }
在主窗口中调用:
var p = myUserControl1.GetLeftEllipsePosition(new Point(), canvas1); //得到左圆的左上角坐标
或者,如果要得到左圆的圆心位置的话,就这样调用:
var p = myUserControl1.GetLeftEllipsePosition(new Point(25, 25), canvas1); //得到左圆的圆心坐标
WPF如何得到一个在用户控件内部的元素的坐标位置相关推荐
- WPF编游戏系列 之四 用户控件
在上一篇<WPF编游戏系列 之三 物品清单>中,对物品清单进行了演示,其中反复用到了同一组控件(如下图),而且 颜昌钢也指出在3.2.2中使用的C#代码过多,其实我在写这些代码时也有同感, ...
- wpf项目中类库内新建用户控件和自定义控件的问题
项目中碰到这么个问题:在类库中添加自定义控件,有2个问题:1.添加时没有模板:2.自行添加类和资源文件后编译没问题,但是使用时失败: 这个问题困扰我好几天了网上也没找到方法,今天解决了 ,希望可以帮助 ...
- delphi 登录界面 主窗体 切换_.NET CORE(C#) WPF 方便的实现用户控件切换(祝大家新年快乐)
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 快到2020年了,祝大家新年快乐,今年2019最后一更,谢谢大家支持! 阅读导航 本文背景 代 ...
- 教你如何 构建基本的用户控件
创建一个简单用户控件是开始自定义控件的好方法.本章主要介绍创建一个基本的颜色拾取器.接下来分析如何将这个控件分解成功能更强大的基于模板的控件. 创建基本的颜色拾取器很容易.然而,创建自定义颜色拾取器仍 ...
- 在asp.net中为Web用户控件添加属性和事件
在90年代初,Microsoft为Web程序员提供的 Active Server Pages(ASP)革命性地改变了Web的编程.它可以利用十分易用的模型在Web服务器上动态生成HTML,并且很容易的 ...
- 第6章 自定义控件和用户控件
部署 创建 内容和布局 设计期行为 性能 ASP.NET 为创建自己的控件提供了两个模型--用户控件模型和自定义控件模型.这两个模型适合不同的情况.一般而言用户控件适合创建内部,应用程序特定的控件和相 ...
- ASP.NET的用户控件
本文介绍如何在ASP.NET中创建用户控件,控件属性的动态修改以及控件的事件出发机制. 简介 ASP.NET的服务端控件使得Web开发工作变得更为简单,功能更为强大.我们介绍过如何在ASP.NET页面 ...
- web developer tips (8):创建web用户控件并包含在web页面里
原文地址: How to create an ASP.NET Web User Control and include it in your web page 使用Visual Web Develop ...
- Asp.Net用户控件编程实例
新建一个Asp.Net空网站:加入一个Default页: 添加一个web用户控件: 解决方案结构如下: 用户控件页面添加一个Label: <%@ Control Language="C ...
- C#仿QQ皮肤-常用用户控件EnterFrom1和窗体EntryForm的实现
导读部分 ----------------------------------------------------------------------------------------------- ...
最新文章
- maven基础概念学习1
- maven的配置-2019-4-13
- 中国数学相比与西方数学为什么会处于劣势?
- Missing URI template variable 'XXXX' for method parameter of type String
- java 四人帮,Java PatternDesign of GOF(四人帮巨著,享誉15年)第十五模式
- excel填充序列_零基础、初学者必须掌握的10个Excel技巧,办公必备!
- 四种依恋类型_【工具】成人依恋量类型介绍
- glDeleteTextures函数对内存的优化
- EF-使用EF写SQL语句
- 字典式攻击及规避方案
- 数据驱动的综合能源系统
- PHP程序员简历模板
- HBase简介、搭建环境及安装部署
- TPU是什么材料,tpu材料属于塑料吗?
- 新一轮支付革命,利楚扫呗的数据库优化之路
- 基于ESP32做低功耗墨水屏时钟
- ubuntu搭建vpn步骤
- javascript返回多个参数
- 技术人攻略访谈三十七-程显峰:IT病得有多重?技术圈交际花谈研发管理怪现状
- 回顾苹果Macintosh的进化史