内容简介:新建空白wpf项目,不会,参考上篇文章。知识点1:获得子元素相对于父元素位置和 宽高后台
新建空白wpf项目,不会,参考上篇文章。
知识点1:获得子元素相对于父元素位置和 宽高
<Canvas x:Name="cv">
<Rectangle x:Name="rct" Width="100" Height="80" Fill="#FFD62525" Canvas.Left="309" Canvas.Top="181" />
</Canvas>
后台
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Rect itemRect = VisualTreeHelper.GetDescendantBounds(rct);
Rect itemBounds = rct.TransformToAncestor(cv).TransformBounds(itemRect);
Console.WriteLine(itemRect);
Console.WriteLine(itemBounds);
}
效果:
itemRect是0,0,100,80
我们把canvas换成grid试试
<Grid x:Name="cv">
<Rectangle x:Name="rct" Width="100" Height="80" Fill="#FFD62525" Margin="173,260,919,429" />
</Grid>
如果子元素在滚动条范围内呢
修改前台
<ScrollViewer Width="600" Height="400" x:Name="sv">
<Grid x:Name="cv" Height="800">
<Rectangle x:Name="rct" Width="100" Height="80" Fill="#FFD62525" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="300,500,0,0"/>
</Grid>
</ScrollViewer>
后台的itemBounds和itemBoundsRelativeScrollViewer是一样的。
我们设置下grid的margin
此时运行效果
和
相对于滚动条的,加上了Grid的Margin的位置
我们理解了怎么求算子元素相对于某个元素的位置,就好办了。
知识点2:矩形区域计算,是否包含。
我们可以通过Rect提供的方法。添加rct2,此时相交的。
Rect itemRect = VisualTreeHelper.GetDescendantBounds(rct);
Rect itemBounds = rct.TransformToAncestor(cv).TransformBounds(itemRect);
//Rect itemBoundsRelativeScrollViewer = rct.TransformToAncestor(sv).TransformBounds(itemRect);
Console.WriteLine(itemRect);
Console.WriteLine(itemBounds);
//Console.WriteLine(itemBoundsRelativeScrollViewer);
Rect itemRect2 = VisualTreeHelper.GetDescendantBounds(rct2);
Rect itemBounds2 = rct2.TransformToAncestor(cv).TransformBounds(itemRect2);
var _isIntersects = itemBounds.IntersectsWith(itemBounds2);
var _isContains = itemBounds.Contains(itemBounds2);
Console.WriteLine("_isIntersects="+ _isIntersects+ ",_isContains="+ _isContains);
修改前台
后台不变,输出
所以根据这个,我们能实现 矩形选择框, 命中元素了。 我们把这种选区,英文名单词叫 Rubberband
知识点3,计算自己的中点坐标,然后相对于父元素的坐标。也可以理解相对于父元素的自己的中间坐标
比如一哥 宽11,高7的矩形,中点坐标,是 7,4但是外面如果有个 父元素,那么此时的坐标是多少呢?这就是解决问题的代码,如下
public static Point GetCenterPoint(this FrameworkElement uiElement, UIElement parent)
{
return uiElement.TransformToAncestor(parent).Transform(new Point(uiElement.Width / 2, uiElement.Height / 2));
}
效果:
我们能求出红色矩形的中心坐标,那么怎么求相对于父容器左上角的坐标呢?
用法如下:
当然这个距离,自己也可以算,矩形的一半+矩形距离左侧的矩形,上面同理,两个和的形成的坐标就是。
====================www.ayjs.net 杨洋 wpfui.com ayui ay aaronyang=======请不要转载谢谢了。=========
推荐您阅读更多有关于“WPF4.5,”的文章
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java Script深度剖析
卢云鹏、沈维伦、Don Gosselin、李筱青 / 卢云鹏、沈维伦、李筱青 / 北京大学出版社 / 2004-10-1 / 49.0
本书适合于大中专院计算机相关专业作为教材,也是JavaScript初学者以及JavaScript爱好者的理想参考用书。书中详细介绍了基本的JavaScript程序设计原理以及实现它们的语法,内容包括JavaScript简介,变理、函数、对角和事件,数据类型、运算符,结构化逻辑控制结构和语句,窗口和框架,表单,动态HTML和动画,cookie和安全性,服务器端 JavaScript,数据库连接,使用......一起来看看 《Java Script深度剖析》 这本书的介绍吧!
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
HEX HSV 转换工具
HEX HSV 互换工具