以编程方式滚动ScrollableTextBlock控件

本文关键字:ScrollableTextBlock 控件 滚动 方式 编程 | 更新日期: 2023-09-27 18:27:26

由于我需要在一个WP7项目中显示长文本字符串,我添加了Alex Yakhnin的ScrollableTextBlock控件。

它按预期工作,但我需要在某些用户交互时自动滚动文本块,但该控件不支持ScrollToVerticalOffset,我不知道如何进行。

我想删除元素并添加新元素就可以了,但我认为对于这样一个简单的任务来说,这太过分了。

以编程方式滚动ScrollableTextBlock控件

一种丑陋的解决方法是向ScrollViewer添加Load事件。当事件触发时,获取发送方(即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);
}

我知道这可能不是最好的解决方案,但它确实有效。希望这能有所帮助!

当您已经获得ScrollViewer实例(带有FindName或其他)时,您需要在scroll offset上创建一个依赖属性来对其进行动画化。这可能会对您有所帮助。

相关文章:
  • 没有找到相关文章