Windows phone 7 可以通过编程方式滚动windows phone中的scrollviewer吗?

Windows phone 7 可以通过编程方式滚动windows phone中的scrollviewer吗?,windows-phone-7,windows-phone-8,Windows Phone 7,Windows Phone 8,是否可以从代码中滚动ScrollViewer 如果是,怎么做 如果没有,您可以建议一些解决方法以获得类似的效果。我有一个包含RichTextBox的ScrollViewer,我想从代码中滚动内容。ScrollViewer.ScrollToVerticallOffset()立即滚动到提供的偏移量 如果您需要一些简单的平滑滚动功能,首先创建一个类,允许绑定到ScrollViewer: public class ScrollViewerOffsetMediator : FrameworkElement

是否可以从代码中滚动
ScrollViewer

如果是,怎么做


如果没有,您可以建议一些解决方法以获得类似的效果。我有一个包含RichTextBox的ScrollViewer,我想从代码中滚动内容。

ScrollViewer.ScrollToVerticallOffset()
立即滚动到提供的偏移量

如果您需要一些简单的平滑滚动功能,首先创建一个类,允许绑定到
ScrollViewer

public class ScrollViewerOffsetMediator : FrameworkElement
{
    /// <summary>
    /// ScrollViewer instance to forward Offset changes on to.
    /// </summary>
    public ScrollViewer ScrollViewer
    {
        get { return (ScrollViewer)GetValue(ScrollViewerProperty); }
        set { SetValue(ScrollViewerProperty, value); }
    }
    public static readonly DependencyProperty ScrollViewerProperty =
        DependencyProperty.Register(
            "ScrollViewer",
            typeof(ScrollViewer),
            typeof(ScrollViewerOffsetMediator),
            new PropertyMetadata(OnScrollViewerChanged));
    private static void OnScrollViewerChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
    {
        var mediator = (ScrollViewerOffsetMediator)o;
        var scrollViewer = (ScrollViewer)(e.NewValue);
        if (null != scrollViewer)
        {
            scrollViewer.ScrollToVerticalOffset(mediator.VerticalOffset);
        }
    }

    /// <summary>
    /// VerticalOffset property to forward to the ScrollViewer.
    /// </summary>
    public double VerticalOffset
    {
        get { return (double)GetValue(VerticalOffsetProperty); }
        set { SetValue(VerticalOffsetProperty, value); }
    }
    public static readonly DependencyProperty VerticalOffsetProperty =
        DependencyProperty.Register(
            "VerticalOffset",
            typeof(double),
            typeof(ScrollViewerOffsetMediator),
            new PropertyMetadata(OnVerticalOffsetChanged));
    public static void OnVerticalOffsetChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
    {
        var mediator = (ScrollViewerOffsetMediator)o;
        if (null != mediator.ScrollViewer)
        {
            mediator.ScrollViewer.ScrollToVerticalOffset((double)(e.NewValue));
        }
    }
}
公共类ScrollViewerOffsetMediator:FrameworkElement
{
/// 
///ScrollViewer实例将偏移量更改转发到。
/// 
公共滚动查看器滚动查看器
{
获取{return(ScrollViewer)GetValue(ScrollViewerProperty);}
设置{SetValue(ScrollViewerProperty,value);}
}
公共静态只读从属属性ScrollViewerProperty=
从属属性。寄存器(
“滚动查看器”,
类型(滚动查看器),
类型(ScrollViewerOffsetMediator),
新属性元数据(OnScrollViewerChanged));
CrollViewerChanged上的私有静态无效(DependencyObject o、DependencyPropertyChangedEventArgs e)
{
var mediator=(ScrollViewerOffsetMediator)o;
var scrollViewer=(scrollViewer)(e.NewValue);
if(null!=滚动查看器)
{
scrollViewer.ScrollToVerticalOffset(mediator.VerticalOffset);
}
}
/// 
///要转发到ScrollViewer的VerticalOffset属性。
/// 
公共双垂直偏移
{
获取{return(double)GetValue(VerticalOffsetProperty);}
set{SetValue(VerticalOffsetProperty,value);}
}
公共静态只读从属属性VerticalOffsetProperty=
从属属性。寄存器(
“垂直偏移”,
类型(双),
类型(ScrollViewerOffsetMediator),
新的不动产数据(垂直偏移变化);
VerticalOffsetChanged上的公共静态无效(DependencyObject o、DependencyPropertyChangedEventArgs e)
{
var mediator=(ScrollViewerOffsetMediator)o;
if(null!=mediator.ScrollViewer)
{
ScrollViewer.ScrollToVerticalOffset((双精度)(e.NewValue));
}
}
}
然后添加到xaml:

<my:ScrollViewerOffsetMediator x:Name="Mediator" ScrollViewer="{Binding ElementName=SmoothScroll}" Margin="0" VerticalAlignment="Top"/>

,其中
SmoothScroll
ScrollViewer
对象

在此阶段,您可以在
Mediator
对象上创建所需的任何动画,以设置滚动动画

的可能副本