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

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

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

第二次,尝试在XAML中设置Popup的定位目标:PlacementTarget="{Binding ElementName=txtAcctName}">。但由于TextBox位于DataGridTemplateColumn中,不起作用。

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

XAML代码:

<Popup Name="popAcct" StaysOpen="False" Placement="Relative"  MaxHeight="500" PlacementTarget="{Binding ElementName=dgVoucher}">

C#代码: 

1 private void TxtAcctName_GotFocus(object sender, RoutedEventArgs e)
2  {
3        Point position = (sender as TextBox).TranslatePoint(new Point(), dgVoucher);  //获取当前单元格中TextBox的坐标位置
4        popAcct.HorizontalOffset = position.X;  //设置横坐标偏移量
5        popAcct.VerticalOffset = position.Y + dgVoucher.RowHeight;  //纵坐标偏移量+行高(必须在XAML中显式设定行高数值,否则会出错)
6  }

 

posted @ 2019-01-06 20:28 向往蓝天的菜鸟 阅读(...) 评论(...) 编辑 收藏