我有一个文本块绑定到滚动查看器来滚动文本。当点击按钮点击等事件发生时,我希望文本自动滚动,无需任何用户输入。我试过使用ScrollToVerticalOffset,但过渡并不顺利。无论如何,我可以让文本顺利向上滚动。在WP7中滚动查看器文本块滚动
3
A
回答
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添加到电话页面并对其进行动画处理。例如,在一个按钮事件处理像这样的:
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的内容是固定的......你可以通过向包装类添加更多的依赖属性来改变它。
我不知道这是否是最好的解决方案,实际上它对我来说看起来相当丑陋,但它应该让你知道它是如何完成的。
0
您需要动画偏移量。由于偏移属性不能动画 - 您必须使用您自己的动画解决方案来更新每帧的偏移量,或者为每次更改都会调用ScrollToVerticalOffset的偏移量创建附加的依赖项属性,并且具有动画效果。
相关问题
- 1. 无法使用滚动查看器在WPF文本块中滚动
- 2. 滚动查看器中的文本框
- 3. 在ScrollViewer中滚动,滚动查看器不会滚动
- 4. 滚动查看器滚动到文本框的位置
- 5. 滚动查看器内不能滚动
- 6. Android滚动查看滚动查看
- 7. 滚动查看不滚动
- 8. 滚动查看不滚动
- 9. 滚动查看不滚动
- 10. 滚动查看不滚动
- 11. 滚动文本块
- 12. 为什么滚动查看器中鼠标滚轮滚动?
- 13. 如何防止滚动查看器在滚动条可见性设置为禁用时向后滚动? WP7
- 14. 如何在滚动查看器中获取滚动条以单击滚动查看器时将其对焦?
- 15. WP7 ScrollViewer - 在查看器的位置滚动到
- 16. 当滚动查看器位于数据模板内时设置滚动查看器垂直偏移(wp7)
- 17. WP7 Listbox滚动
- 18. 滚动查看器回滚到旧位置后滚动
- 19. 用滚动查看全文
- 20. 自定义滚动查看在滚动查看
- 21. 滚动查看不显示文本域
- 22. 自定义GUI - 滚动文本查看
- 23. WP7在文本框中自动滚动文字
- 24. 滚动查看重置滚动
- 25. SWT/JFace滚动查看不滚动
- 26. 滚动查看不滚动到底部
- 27. Achartengine线图滚动滚动查看
- 28. 打印文档和滚动查看器
- 29. 扩展器中的滚动查看器
- 30. 滚动查看textview
我创建了一个新的WP7项目。将AnimatableScrollViewer.xaml&.xaml.cs添加到项目中。我试图使用cmdScroll_Click函数中的代码。但我没有开始动画。我想我需要在我的MainPage.xaml中使用这个控件。请让我知道是否需要将此用户控件包含在我的应用程序主页xaml中。 – Mugu
对不起,我设法弄清楚了。无论如何,感谢您的帮助。只需要一个更多的帮助。 Incase我想让动画变慢应该对代码进行哪些修改? – Mugu
在点击处理程序中有一行'animation.Duration = new Duration(new TimeSpan(0,0,2));'这里您可以修改动画的总时间。 2意味着2秒 –