动画集线器的滚动

时间:2014-11-08 19:01:49

标签: xaml windows-phone-8.1 win-universal-app

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

我正在使用Hub的{​​{1}}方法,但它没有为滚动设置动画,因此我决定使用ScrollTo(section)内的ScrollViewer Hub方法。

如果有4个ChangeView,它会在挂起之前滚动到第二个。

HubSectionviewer.HorizontalOffset360的{​​{1}})保持已修复,并且无法更改它!< / p>

这是我用来为滚动设置动画的代码:

HubSection

ActualWidth来自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)); }

我期望的是致电

GetDescendantsOfType

应将WinRTXamlToolkit.Controls.Extensions滚动到ScrollHubSection(myHub, section1, 1) viewer,而

HorizontalOffset

360变为正确ScrollHubSection(myHub, section2, 2) )仍将offset留给720这是非常不可见的。

如果我通过

手动插入偏移量
HorizontalOffset

它转到360的{​​{1}},但如果我这样做

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

HorizontalOffset1000时,它不起作用。

这真让我生气,因为我整个下午都在浪费时试图修复它而没有成功。

你能帮帮我吗?

1 个答案:

答案 0 :(得分: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));
}