欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WPF学习笔记(2):准确定位弹出窗

程序员文章站 2022-05-14 10:06:13
效果图:使弹出的列表框紧随在单元格的下边缘。 第一次,尝试在XAML中设置Popup的定位方式:Placement="Mouse"。基本能够定位,但当在输入前移动鼠标,列表框就会随鼠标位置显示,偏离了预定位置。 第二次,尝试在XAML中设置Popup的定位目标:PlacementTarget="{B ......

效果图:使弹出的列表框紧随在单元格的下边缘。

WPF学习笔记(2):准确定位弹出窗

第一次,尝试在xaml中设置popup的定位方式:placement="mouse"。基本能够定位,但当在输入前移动鼠标,列表框就会随鼠标位置显示,偏离了预定位置。

第二次,尝试在xaml中设置popup的定位目标:placementtarget="{binding elementname=txtacctname}">。但由于textbox位于datagridtemplatecolumn中,不起作用。

第三次,改变思路,通过获取textbox的位置后,再以此设置popup的位置,成功解决问题。定位目标设置为datagrid,定位方式设置为relative(以目标控件的左上角为原点),代码如下:

WPF学习笔记(2):准确定位弹出窗
<popup name="popacct" staysopen="false" placement="relative"  maxheight="500" placementtarget="{binding elementname=dgvoucher}">
xaml code

 

WPF学习笔记(2):准确定位弹出窗
1 private void txtacctname_gotfocus(object sender, routedeventargs e)
2 {
3       point position = (sender as textbox).translatepoint(new point(), dgvoucher);
4       popacct.horizontaloffset = position.x;
5       popacct.verticaloffset = position.y + dgvoucher.rowheight;  
6 }
c# code