2011-03-03 41 views
2

嘿傢伙, 我有一個silverlight導航應用程序,在我的一個頁面中,我有一個表格由最終用戶填寫,其中有幾個TextBoxes要填充,問題是,當我按TAB鍵移動到下一個文本框時,光標會按順序移動到下一個文本框,但頁面不會向下滾動到新的文本框,所以即使光標位於此處也不能看到文本框。 ...有沒有人知道這個解決方案? 我感謝任何幫助。Silverlight 4頁滾動TAB命中

謝謝 卜拉欣

回答

1

這裏的測試XAML:

<ScrollViewer x:Name="scrollViewer"> 
    <StackPanel x:Name="stackPanel" 
       Orientation="Vertical"> 

     <TextBox Width="100" 
       Text="#1" 
       GotFocus="TextBox_GotFocus" /> 

     <Rectangle Fill="AliceBlue" 
        Width="100" 
        Height="400" /> 

     <TextBox Width="100" 
       Text="#2" 
       GotFocus="TextBox_GotFocus" /> 

     <Rectangle Fill="AliceBlue" 
        Width="100" 
        Height="400" /> 

     <TextBox Width="100" 
       Text="#3" 
       GotFocus="TextBox_GotFocus" /> 
    </StackPanel> 
</ScrollViewer> 

代碼爲 'TextBox_GotFocus' 事件:

private void TextBox_GotFocus(object sender, RoutedEventArgs e) 
{ 
    GeneralTransform gt = ((TextBox)sender).TransformToVisual(this); 
    Point textBoxPositionRelativeToControl = gt.Transform(new Point(0, 0)); 

    if (textBoxPositionRelativeToControl.Y > this.ActualHeight 
     || textBoxPositionRelativeToControl.Y < this.ActualHeight) 
    { 
     gt = ((TextBox)sender).TransformToVisual(stackPanel); 
     Point textBoxPositionRelativeToStackPanel = gt.Transform(new Point(0, 0)); 

     scrollViewer.ScrollToVerticalOffset(textBoxPositionRelativeToStackPanel.Y - this.ActualHeight/2); 
    } 
} 

更新的代碼,這樣如果文本框是外可見區域然後滾動查看器將隱藏文本框居中;否則,沒有任何反應。如果您選擇下一個或上一個文本框(shift +選項卡),則工作。

+0

這將只在頁面上的silverlight區域完全可見時才起作用,否則您將不得不滾動網頁以及... – 2011-03-03 19:42:34

+0

是的,在他的情況下,SL區域在頁面上完全可見,I認爲。 – 2011-03-03 19:48:05

+0

使用這種方法是非常好的主意。但是,當我用鼠標點擊控件時,網頁會滾動。它不應該是這樣。你能否幫我改變一下代碼,這樣當控件不可見時,網頁只會滾動。 – 2011-03-04 09:54:38