我有一个绑定到滚动查看器的文本块来滚动文本。 我希望文本在触发按钮点击等事件时自动滚动而不显示任何用户输入。 我尝试使用ScrollToVerticalOffset,但过渡并不顺利。 无论如何,我可以使文本顺利向上滚动。

===============>>#1 票数:5 已采纳

下面是一个示例,我创建了一个名为AnimatableScrollViewer的包装器控件,它包含一个常用的ScrollViewer和一个TextBlock。

<UserControl>
    <Grid x:Name="LayoutRoot" Background="Transparent">
            <ScrollViewer x:Name="scrollViewer" Width="{Binding ActualWidth, ElementName=userControl, Mode=OneWay}" Height="{Binding ActualHeight, ElementName=userControl, Mode=OneWay}">
                <TextBlock TextWrapping="Wrap" Text="Add some pretty long text here..."/>
        </ScrollViewer>
    </Grid>
</UserControl>

在代码隐藏中,我添加了一个DependencyProperty(我们可以从外部制作动画),在每次更改时调用ScrollViewer的ScrollToVerticalOffset()方法。

public partial class AnimatableScrollViewer : UserControl
{
    public static readonly DependencyProperty AnimatablOffsetProperty = DependencyProperty.Register("AnimatableOffset",
        typeof(double), typeof(AnimatableScrollViewer), new PropertyMetadata(AnimatableOffsetPropertyChanged));

    public double AnimatableOffset
    {
        get { return (double)this.GetValue(AnimatablOffsetProperty); }
        set { this.SetValue(AnimatablOffsetProperty, value); }
    }

    public AnimatableScrollViewer()
    {
        InitializeComponent();
        AnimatableOffset = scrollViewer.VerticalOffset;
    }

    private static void AnimatableOffsetPropertyChanged(object sender, DependencyPropertyChangedEventArgs args)
    {
        AnimatableScrollViewer cThis = sender as AnimatableScrollViewer;
        cThis.scrollViewer.ScrollToVerticalOffset((double)args.NewValue);
    }
}

现在,您可以将AnimatableScrollViewer添加到PhonePage并为其设置动画。 例如,在像这样的按钮事件处理程序中:

private void cmdScroll_Click(object sender, RoutedEventArgs e)
    {
        // Calculate target offset
        double targetOffset = 1000;

        // Create animation and storyboard
        DoubleAnimation animation = new DoubleAnimation();
        animation.EasingFunction = new CircleEase();
        animation.Duration = new Duration(new TimeSpan(0, 0, 2));
        animation.From = animatableScrollViewer.AnimatableOffset;
        animation.To = targetOffset;

        Storyboard.SetTarget(animation, animatableScrollViewer);
        Storyboard.SetTargetProperty(animation, new PropertyPath("(AnimatableScrollViewer.AnimatableOffset)"));
        Storyboard storyboard = new Storyboard();
        storyboard.Children.Add(animation);

        storyboard.Begin();
    }

当然,您也可以在xaml代码中创建动画,使其看起来更清晰。 现在,ScrollViewer的内容是固定的......您可以通过向包装类添加更多依赖项属性来使其更改。

我不知道这是不是最好的解决方案,事实上它对我来说看起来很难看,但它应该让你知道如何做到这一点。

===============>>#2 票数:0

您需要为偏移设置动画。 由于无法对偏移属性进行动画处理 - 您必须使用自己的动画解决方案来更新每帧的偏移量,或者为每次更改时调用ScrollToVerticalOffset的偏移量创建附加的依赖项属性,并且可以进行动画处理。

  ask by Mugu translate from so

未解决问题?本站智能推荐:

4回复

滚动到列表框wp7的底部

我有很多项目(0-100)最终需要滚动到包含它的Listbox的底部。我试过: 但是这对我不起作用。scrollviewer包装了列表框和文本框。(列表框垂直滚动处于禁用状态)。 UPD xaml: 和cs:
1回复

当滚动查看器滚动到末尾时触发(调用)方法

谷歌搜索了很多之后,最后我要问你们。 我创建了scrollviewer ,其中包含items( listboxItems )和从webservices获取的这些项目。 但一次只能提取5个项目。 因此最初将是5个项目,然后是下5个(追加到scrollviewer ),然后是下5个,依此类推
2回复

如何覆盖ListBox中的垂直滚动行为?

我正在使用带有wrappnael的列表框来以网格形式保存图像列表。 我还使用鼠标拖动行为在ListBox中拖放项目。 但是我无法垂直向上或向下拖动项目,因为ListBox中有垂直滚动。 如何通过不影响滚动行为的方式垂直拖动项目?
1回复

C#scrollviewer和调度计时器触发问题

因此,在通过scrollviewer滚动在堆栈面板中容纳约100个小矩形时,我的调度计时器的启动存在问题。 我的调度计时器每400毫秒触发一次,每400毫秒的滴答声播放一次声音。 如果我不触摸滚动查看器,则刻度线会按需触发。 但是,如果我开始移动滚动查看器,则刻度可能在600-1300
1回复

wp7,如何在ScrollViewer中阻止滚动

我不会在ScrollViewer中移动UIElements。 我有这样的想法: 我使用ManipulationDelta事件移动矩形。 但是,当我这样做时,scrollViewer也会滚动。 如何锁定ScrollViewer的滚动? 那段代码根本没用。 我已经失去
2回复

ScrollViewer在WP7上向后滚动

我创建了一个页面,其中有来自用户的大量输入。 因此,用户应该能够向下滚动以按下“上载”按钮。 为了向下滚动页面,我在网格外部使用了ScrollViewer。 我可以滚动,但向下滚动后页面仍会向后滚动。 这是我的代码: 可能导致此问题的原因是什么,我该如何解决?
1回复

将滚动查看器锁定到位

我在Windows Phone 7应用程序的滚动查看器中有一个墨水演示者。 通常,当用户开始绘制时,scrollviewer会接管中风,这使得实际绘制内容变得困难。 当需要使用墨水演示者时,我尝试禁用ScrollBarVisibility,但是滚动查看器会自动平移回顶部。 因此,如何在使用
3回复

如何控制Windows Phone中滚动查看器的滚动位置

我正在使用scrollviewer来显示内容,并向scrollviewer添加了一个“DoubleTap”事件。 在doubleTap事件中,我想让scrollviewer自动向上滚动到scrollviewer的顶部,但我找不到任何属性来控制scrollviewer。 有什么想法吗?
1回复

Windows Phone 7中的滚动查看器无法正常工作

我是windows phone 7开发的新手。 我已经开始使用滚动查看器的应用程序。 这是我的代码: 在模拟器中,页面不滚动。 如果我滚动按住鼠标按钮然后滚动但在释放鼠标按钮后返回到它的原始状态....请帮助任何人....感谢先进!
2回复

如何始终在wp7的列表框中显示滚动条

如何始终在列表框中显示滚动条。 如果我删除Scrollviewer的Notscrolling视觉状态。 仅在发生向下滚动后才始终显示滚动条。 我想在页面加载时显示滚动条,它应该始终可见。 请帮助我