原文: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如何得到一个在用户控件内部的元素的坐标位置相关推荐

  1. WPF编游戏系列 之四 用户控件

    在上一篇<WPF编游戏系列 之三 物品清单>中,对物品清单进行了演示,其中反复用到了同一组控件(如下图),而且 颜昌钢也指出在3.2.2中使用的C#代码过多,其实我在写这些代码时也有同感, ...

  2. wpf项目中类库内新建用户控件和自定义控件的问题

    项目中碰到这么个问题:在类库中添加自定义控件,有2个问题:1.添加时没有模板:2.自行添加类和资源文件后编译没问题,但是使用时失败: 这个问题困扰我好几天了网上也没找到方法,今天解决了 ,希望可以帮助 ...

  3. delphi 登录界面 主窗体 切换_.NET CORE(C#) WPF 方便的实现用户控件切换(祝大家新年快乐)

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 快到2020年了,祝大家新年快乐,今年2019最后一更,谢谢大家支持! 阅读导航 本文背景 代 ...

  4. 教你如何 构建基本的用户控件

    创建一个简单用户控件是开始自定义控件的好方法.本章主要介绍创建一个基本的颜色拾取器.接下来分析如何将这个控件分解成功能更强大的基于模板的控件. 创建基本的颜色拾取器很容易.然而,创建自定义颜色拾取器仍 ...

  5. 在asp.net中为Web用户控件添加属性和事件

    在90年代初,Microsoft为Web程序员提供的 Active Server Pages(ASP)革命性地改变了Web的编程.它可以利用十分易用的模型在Web服务器上动态生成HTML,并且很容易的 ...

  6. 第6章 自定义控件和用户控件

    部署 创建 内容和布局 设计期行为 性能 ASP.NET 为创建自己的控件提供了两个模型--用户控件模型和自定义控件模型.这两个模型适合不同的情况.一般而言用户控件适合创建内部,应用程序特定的控件和相 ...

  7. ASP.NET的用户控件

    本文介绍如何在ASP.NET中创建用户控件,控件属性的动态修改以及控件的事件出发机制. 简介 ASP.NET的服务端控件使得Web开发工作变得更为简单,功能更为强大.我们介绍过如何在ASP.NET页面 ...

  8. 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 ...

  9. Asp.Net用户控件编程实例

    新建一个Asp.Net空网站:加入一个Default页: 添加一个web用户控件: 解决方案结构如下: 用户控件页面添加一个Label: <%@ Control Language="C ...

  10. C#仿QQ皮肤-常用用户控件EnterFrom1和窗体EntryForm的实现

    导读部分 ----------------------------------------------------------------------------------------------- ...

最新文章

  1. maven基础概念学习1
  2. maven的配置-2019-4-13
  3. 中国数学相比与西方数学为什么会处于劣势?
  4. Missing URI template variable 'XXXX' for method parameter of type String
  5. java 四人帮,Java PatternDesign of GOF(四人帮巨著,享誉15年)第十五模式
  6. excel填充序列_零基础、初学者必须掌握的10个Excel技巧,办公必备!
  7. 四种依恋类型_【工具】成人依恋量类型介绍
  8. glDeleteTextures函数对内存的优化
  9. EF-使用EF写SQL语句
  10. 字典式攻击及规避方案
  11. 数据驱动的综合能源系统
  12. PHP程序员简历模板
  13. HBase简介、搭建环境及安装部署
  14. TPU是什么材料,tpu材料属于塑料吗?
  15. 新一轮支付革命,利楚扫呗的数据库优化之路
  16. 基于ESP32做低功耗墨水屏时钟
  17. ubuntu搭建vpn步骤
  18. javascript返回多个参数
  19. 技术人攻略访谈三十七-程显峰:IT病得有多重?技术圈交际花谈研发管理怪现状
  20. 回顾苹果Macintosh的进化史

热门文章

  1. C#Json数据交互
  2. HTML基础学习(二)—CSS
  3. 美国数据不佳美元仍跳升,只因欧元区问题更多
  4. 动态包含与静态包含的区别
  5. Ext4核心组件Grid的变化及学习(2):数据列的基本操作
  6. returned message 找不到可安装的 ISAM。.
  7. 关于oracle自动编号
  8. Java判断是否为移动端
  9. HDU6135 拓展KMP模板
  10. (转)C++的tie()函数