调用此方法时,如何获取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)
时答案 0 :(得分:1)
因为更新中的“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的原因。
答案 1 :(得分:1)
像这样获取TextBox的参考,不要使用“this”。在这种情况下,“这个”是一个完全不同的对象:
private void txt1_GotFocus(object sender, RoutedEventArgs e)
{
TextBox t = sender as TextBox;
GeneralTransform gt ...
}
答案 2 :(得分:0)
我希望我所有的文本框都移到右边(减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;
}
}
这对我来说很好,:)