2012-03-09 47 views
0

,因爲我需要在我的WP7項目之一,顯示長文本串,我說Alex Yakhnin's ScrollableTextBlock控制它。編程滾動ScrollableTextBlock控制

它按預期工作,但我需要在某些用戶交互時自動滾動文本塊,但該控件不支持ScrollToVerticalOffset開箱即用,我不知道該如何去做。

我想刪除元素,並添加新的人會做,但我認爲這是做得有點過分了這樣一個簡單的任務。

回答

1

一類醜陋的解決辦法是到負載事件添加到ScrollViewer中。當事件觸發時,獲取發件人(這是ScrollViewer,呵呵!)並將其存儲在類級變量中。通過這種方式,您可以使用其他方法訪問它,並且可以使用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); 
} 

我知道這可能不是最好的解決方案,但它的工作原理。希望這可以幫助!

+1

事實上,可能不是最好的方式,但仍然奏效。 – 2012-03-12 12:52:20

0

當您已經獲得ScrollViewer實例(使用FindName或其他)時,則需要在scroll offset上創建依賴項屬性以爲其設置動畫效果。 This可能會幫助你。