2014-11-08 78 views
0

我已经写了附加属性的能够显示HubSection的索引绑定到我的视图模型,这样我可以在我的代码中改变它。动画效果枢纽的滚动

我使用HubScrollTo(section)方法,但它并没有动画滚动,所以我决定用HubScrollViewerChangeView方法。

发生什么事是,有4 HubSection,它只是在悬挂前滚动到第二个。

viewer.HorizontalOffset停留固定在360(这是HubSectionActualWidth),而且也没有办法去改变它!

下面是我使用动画滚动代码:

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)); 
} 

GetDescendantsOfTypeWinRTXamlToolkit.Controls.Extensions

什么我想到的是,调用

ScrollHubSection(myHub, section1, 1) 

应将viewer滚动到360HorizontalOffset,而

ScrollHubSection(myHub, section2, 2) 

(与offset变得正确720)仍有HorizontalOffset360这是相当nonsens。

如果我手动插入做

viewer.ChangeView(1000, null, null, false)); 

它去的1000HorizontalOffset偏移,但如果我不

viewer.ChangeView(offset, null, null, false)); 

offset1000这是行不通的。

这真的让我生气,因为我浪费了整个下午试图解决它没有成功。

你能帮我吗?

回答

0

你可以这样做。

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)); 
}