Xaml 为中心的滚动设置动画

Xaml 为中心的滚动设置动画,xaml,windows-phone-8.1,win-universal-app,Xaml,Windows Phone 8.1,Win Universal App,我已经编写了一个附加属性,以便能够将显示的HubSection的索引绑定到我的ViewModel,以便在代码中对其进行更改 我使用的是中心的ScrollTosection方法,但它没有设置滚动动画,所以我决定在中心内使用ScrollViewer和ChangeView方法 发生的情况是,有4个HubSection,它只是在挂起之前滚动到第二个HubSection viewer.horizontalpoffset保持固定在360,这是轮毂部分的实际宽度,无法更改 下面是我用来制作滚动动画的代码: a

我已经编写了一个附加属性,以便能够将显示的HubSection的索引绑定到我的ViewModel,以便在代码中对其进行更改

我使用的是中心的ScrollTosection方法,但它没有设置滚动动画,所以我决定在中心内使用ScrollViewer和ChangeView方法

发生的情况是,有4个HubSection,它只是在挂起之前滚动到第二个HubSection

viewer.horizontalpoffset保持固定在360,这是轮毂部分的实际宽度,无法更改

下面是我用来制作滚动动画的代码:

async private static Task ScrollHubToSection(Hub hub, HubSection section, int index)
{
    var dispatcher = hub.Dispatcher;            
    var viewer = hub.GetDescendantsOfType<ScrollViewer>().First();
    var offset = index*section.ActualWidth;                   
    await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => viewer.ChangeView(offset, null, null, false));
}
应将查看器滚动至360的水平偏移,而

当偏移量正确时,720仍将水平偏移量保留为360,这是完全不存在的

如果我通过执行以下操作手动插入偏移量

viewer.ChangeView(1000, null, null, false));
它的水平偏移量为1000,但如果我这样做

viewer.ChangeView(offset, null, null, false));
当偏移量为1000时,它不起作用

这真让我抓狂,因为我浪费了整个下午试图修复它,但没有成功


你能帮我吗?

你可以这样做

async private static Task ScrollHubToSection(Hub hub, HubSection section, int index)
{
    var dispatcher = hub.Dispatcher;            
    var viewer = hub.GetDescendantsOfType<ScrollViewer>().First();
    double offset = 0; 
    for (int i = 0; i < index; i++)
    {
        offset += hub.Sections[i].ActualWidth;
    }                  
    await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => viewer.ChangeView(offset, null, null, false));
}
viewer.ChangeView(offset, null, null, false));
async private static Task ScrollHubToSection(Hub hub, HubSection section, int index)
{
    var dispatcher = hub.Dispatcher;            
    var viewer = hub.GetDescendantsOfType<ScrollViewer>().First();
    double offset = 0; 
    for (int i = 0; i < index; i++)
    {
        offset += hub.Sections[i].ActualWidth;
    }                  
    await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => viewer.ChangeView(offset, null, null, false));
}