一種の厄介な回避策は、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);
}
私はそれはおそらく最も素晴らしい解決策ではないと知っているが、それは動作します。お役に立てれば!
実際、おそらく最も良い方法ではありませんが、それにもかかわらず働いていました。 –