Одним из видов уродливого обходного пути является добавление события 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);
}
Я знаю, что это, вероятно, не самое лучшее решение, но оно работает. Надеюсь, это поможет!