如何获取textBox的当前位置
本文关键字:位置 textBox 何获取 获取 | 更新日期: 2023-09-27 18:30:02
调用此方法时,如何获取textBox元素的当前位置?
private void UserTextBox_GotFocus(object sender, RoutedEventArgs e)
{
}
更新
GeneralTransform gt = this.TransformToVisual(Application.Current.RootVisual as UIElement);
Point offset = gt.Transform(new Point(0, 0));
double controlTop = offset.Y;
double controlLeft = offset.X;
当我使用这个controlTop和controlLeft是(0,0)
因为更新中的"this"是页面对象。在xaml中使用x:Name="MyTextbox"命名文本框。然后在您的焦点事件处理程序中:
private void UserTextBox_GotFocus(object sender, RoutedEventArgs e)
{
GeneralTransform gt = MyTextbox.TransformToVisual(Application.Current.RootVisual);
Point offset = gt.Transform(new Point(0, 0));
double controlTop = offset.Y;
double controlLeft = offset.X;
}
在代码中,您试图根据应用程序获得页面的绝对位置,这就是为什么偏移值为0的原因。
这样获取TextBox的引用,不要使用"this"。在这种情况下,"this"是一个完全不同的对象:
private void txt1_GotFocus(object sender, RoutedEventArgs e)
{
TextBox t = sender as TextBox;
GeneralTransform gt ...
}
我希望所有的文本框都转到右边(减去20)。它们都在左边水平对齐。
我启用了页面SizeChanged事件处理程序,然后添加了:
private void Page_SizeChanged(object sender, SizeChangedEventArgs e)
{
GeneralTransform gt = tbSvcMsgOut.TransformToVisual(this);
Point offset = gt.TransformPoint(new Point(0, 0));
double controlTop = offset.Y;
double controlLeft = offset.X;
double newWidth = e.NewSize.Width - controlLeft - 20;
if (newWidth > tbSvcMsgOut.MinWidth)
{
tbSvcMsgOut.Width = newWidth;
tbDeviceMsgIn.Width = newWidth;
tbSvcMsgIn.Width = newWidth;
tbDeiceMsgOut.Width = newWidth;
}
}
这对我来说很好,:)