我已经编写了附加属性,以便能够将显示的HubSection
的索引绑定到我的 ViewModel ,以便我可以在其中更改它我的代码。
我正在使用Hub
的{{1}}方法,但它没有为滚动设置动画,因此我决定使用ScrollTo(section)
内的ScrollViewer
Hub
方法。
如果有4个ChangeView
,它会在挂起之前滚动到第二个。
HubSection
在viewer.HorizontalOffset
(360
的{{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));
当HorizontalOffset
为1000
时,它不起作用。
这真让我生气,因为我整个下午都在浪费时试图修复它而没有成功。
你能帮帮我吗?
答案 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));
}