Silverlight 4 Page прокрутки на вкладке TAB - PullRequest
2 голосов
/ 03 марта 2011

Эй, ребята, У меня есть приложение Silverlight Navigation, где на одной из моих страниц у меня есть форма, которую должен заполнить конечный пользователь, у которой есть пара текстовых полей, которые нужно заполнить, проблема в том, что когда я нажимаю клавишу TAB, чтобы перейти к следующей TextBox курсор перемещается к следующему TextBox в последовательности, но страница не прокручивается вниз к новому TextBox, поэтому я не вижу TextBox, даже если курсор находится там .... Кто-нибудь знает решение для этого ?? Я ценю любую помощь.

Спасибо, Брахим

1 Ответ

1 голос
/ 03 марта 2011

Вот тестовый 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 + tab).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...