如何获取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)

如何获取textBox的当前位置

因为更新中的"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;
            }
        }

这对我来说很好,:)