Я написал Присоединенное свойство, чтобы иметь возможность привязать индекс отображаемого HubSection
к моей ViewModel, чтобы я мог изменить его в своем коде.
Я использую метод ScrollTo(section)
Hub
, но он не анимирует прокрутку, поэтому я решил использовать ScrollViewer
внутри Hub
с методом ChangeView
.
Бывает так, что имея 4 HubSection
просто пролистывает до второго перед зависанием.
viewer.HorizontalOffset
остается фиксированным на уровне 360
(то есть ActualWidth
у HubSection
), и изменить его невозможно!
Вот код, который я использую для анимации прокрутки:
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
, что совершенно бессмысленно.
Если я вручную вставлю смещение, выполнив
viewer.ChangeView(1000, null, null, false));
это идет к HorizontalOffset
из 1000
, но если я это сделаю
viewer.ChangeView(offset, null, null, false));
когда offset
равно 1000
, это не работает.
Это действительно сводит меня с ума, потому что я потратил впустую весь день, безуспешно пытаясь это исправить.
Не могли бы вы мне помочь?