1

如何在調用此方法時獲取textBox元素的當前位置?如何獲取文本框的當前位置

private void UserTextBox_GotFocus(object sender, RoutedEventArgs e) 
     { 

     } 

UPDATE

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)

回答

1

因爲 「這」 在你更新的頁面對象。在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

像這樣獲取TextBox的引用,不要使用「this」。 「這」在這種情況下是完全不同的對象:

private void txt1_GotFocus(object sender, RoutedEventArgs e) 
    { 
     TextBox t = sender as TextBox; 
     GeneralTransform gt ... 
    } 
+0

是的,這是我的解決方案。唯一的區別是你從事件參數「sender」中引用了文本框,但是你不需要這樣做,因爲你已經使用它的名稱從代碼隱藏中引用了它。這個想法是,而不是使用「this」,你需要使用對你的文本框的引用。 – omerkirk 2012-04-06 21:20:21

+0

如果TextBox位於ListBox中的DataTemplate中,您的解決方案將無法工作。 – Eugene 2012-04-06 23:58:13

+0

我明白了,我認爲問題更新後的部分是revolutionkpi添加的部分,而不是您。 – Eugene 2012-04-07 06:26:17