Say I have the following XAML:
<Grid ManipulationMode="TranslateY" ManipulationDelta="Grid_ManipulationDelta">
<ScrollViewer HorizontalScrollMode="Enabled" VerticalScrollMode="Disabled" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Hidden">
<StackPanel Orientation="Horizontal">
<Rectangle Width="100" Height="100" Fill="Red" />
<Rectangle Width="100" Height="100" Fill="Blue" />
<Rectangle Width="100" Height="100" Fill="Red" />
<Rectangle Width="100" Height="100" Fill="Blue" />
<Rectangle Width="100" Height="100" Fill="Red" />
<Rectangle Width="100" Height="100" Fill="Blue" />
<Rectangle Width="100" Height="100" Fill="Red" />
<Rectangle Width="100" Height="100" Fill="Blue" />
</StackPanel>
</ScrollViewer>
</Grid>
(The StackPanel is just arbitrary content.)
I would like the Grid to handle TranslateY manipulation events only, and the ScrollViewer to scroll horizontally only; however the ScrollViewer takes precedence even if the manipulation was vertical and not horizontal. The Grid never receives ManipulationDelta events, except if I disable scrolling on the ScrollViewer, which obviously isn't what I would like.
Does this have something to do with the ScrollViewer's "magical" behavior of direct manipulation events? I've tried different combinations of "rails" settings too (i.e. setting Grid's ManipulationMode to TranslateRailsY and setting IsHorizontalRailEnabled to true on the ScrollViewer) but it still doesn't work.