如何获取textBox的当前位置

时间:2012-04-05 12:38:02

标签: c# silverlight windows-phone-7 silverlight-4.0 silverlight-3.0

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

3 个答案:

答案 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;
            }
        }

这对我来说很好,:)