Я хочу реализовать анимацию следующим образом:
Поэтому я решил использовать FlipView в качестве основного контейнера и сетку с двумя строками в качестве шаблона данных. Grid будет обрабатывать событие ManipulationDelta, чтобы уменьшить высоту первой части текста, чтобы вторая часть стала видимой. Когда высота текста достигает минимального значения, мы должны перенаправить событие в родительский ScrollViewer, чтобы он мог перейти к следующему элементу.
private void OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
if (CanDecreaseLine(e))
{
//Decrease first line height...
e.Handled = true;
}
}
Но я столкнулся с проблемой, что когда я пытаюсь обработать ManipulationDelta на дочерней (Grid) стороне, FlipView перестает работать. Независимо от того, устанавливаем ли мы свойство Handled или нет
Вот упрощенный xaml:
<FlipView>
<FlipView.ItemTemplate>
<DataTemplate>
<Grid Background="Transparent"
ManipulationMode="TranslateY, TranslateInertia"
ManipulationDelta="OnManipulationDelta">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="FirstLine"/>
<TextBlock Grid.Row="1" Text="SecondLine"/>
</Grid>
</DataTemplate>
</FlipView.ItemTemplate>
</FlipView>
ScrollViewer перестает работать из-за ManipulationMode="TranslateY, TranslateInertia", но без него Grid не будет получать события манипуляции, которые мне нужны для изменения размера строк Grid для достижения анимации.
Можно ли обрабатывать события манипуляции в дочернем элементе ScrollViewer или есть ли другой способ добиться этой анимации?