Программная прокрутка элемента управления ScrollableTextBlock - PullRequest
0 голосов
/ 09 марта 2012

Поскольку мне нужно отобразить длинные текстовые строки в одном из моих проектов WP7, я добавил элемент управления ScrollableTextBlock Алекса Яхнина *

Он работает, как и ожидалось, но мне нужно прокручивать текстовый блок автоматически при определенном взаимодействии с пользователем, но элемент управления не поддерживает ScrollToVerticalOffset из коробки, и я не знаю, как это сделать.

Я думаю, что удаление элемента и добавление нового сделало бы это, но я думаю, что это слишком много для такой простой задачи.

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Одним из видов уродливого обходного пути является добавление события Load в ScrollViewer. Когда событие запускается, извлеките отправителя (который является ScrollViewer, duh!) И сохраните его в переменной уровня класса. Таким образом, у вас есть доступ к нему другими методами, и вы можете использовать метод ScrollToVerticalOffset.

XAML

<PhoneApp1:ScrollableTextBlock x:Name="TextBlockOne" Margin="0,0,-12,0">
    <PhoneApp1:ScrollableTextBlock.Style>
        <Style TargetType="PhoneApp1:ScrollableTextBlock" >
            <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/>
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/>
            <Setter Property="Padding" Value="0"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="PhoneApp1:ScrollableTextBlock">
                        <ScrollViewer Foreground="{TemplateBinding Foreground}"
                                      Background="{TemplateBinding Background}" 
                                      BorderBrush="{TemplateBinding BorderBrush}"
                                      BorderThickness="{TemplateBinding BorderThickness}" 
                                      Padding="{TemplateBinding Padding}"
                                      Loaded="ScrollViewer_Loaded">
                            <StackPanel Orientation="Vertical" x:Name="StackPanel" />
                        </ScrollViewer>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </PhoneApp1:ScrollableTextBlock.Style>
</PhoneApp1:ScrollableTextBlock>

C #

private ScrollViewer _scroller;

private void ScrollViewer_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
    _scroller = sender as ScrollViewer;
}

private void SomeMethod()
{
    _scroller.ScrollToVerticalOffset(200d);
}

Я знаю, что это, вероятно, не самое лучшее решение, но оно работает. Надеюсь, это поможет!

0 голосов
/ 09 марта 2012

Когда вы уже получаете ScrollViewer экземпляр (с FindName или чем-то еще), вам нужно создать свойство зависимости для scroll offset, чтобы анимировать его. Это может вам помочь.

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