1

调用此方法时如何获取 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)

4

3 回答 3

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 偏移值的原因。

于 2012-04-06T11:57:26.807 回答
1

像这样获取 TextBox 的参考,不要使用“this”。在这种情况下,“this”是一个完全不同的对象:

    private void txt1_GotFocus(object sender, RoutedEventArgs e)
    {
        TextBox t = sender as TextBox;
        GeneralTransform gt ...
    }
于 2012-04-06T12:11:24.430 回答
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;
            }
        }

这对我来说很好,:)

于 2019-05-31T07:17:51.417 回答