我有一个ScrollViewer,里面有一些按钮,打算在触摸屏上使用。我遇到的问题是,当 ScrollViewer 平移/滚动时,其中的按钮会触发触地事件
因此,在这种情况下,我列出了 UserBtn 的 30 个实例,当我滚动浏览时,每次我触摸屏幕时,如果我触摸一个按钮来初始化平移,该事件将在我不希望时触发。
有没有办法防止在平移时发生这种情况?
<ScrollViewer Name="UserButtonScroll" Grid.Row="0" Grid.RowSpan="2" PanningMode="VerticalOnly" PanningRatio="2" ManipulationBoundaryFeedback="OnManipulationBoundaryFeedback" VerticalContentAlignment="Stretch" VerticalScrollBarVisibility="Hidden" IsManipulationEnabled="True">
<ItemsControl Name="UsersButtonControl" ItemsSource="{Binding CurrentViewModel.ActiveButtons}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" ></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Name="UserBtn" Tag="{Binding BtnType}" Style="{Binding Style, Converter={StaticResource converter}}" TouchDown="CommandParse" MaxHeight="150" BorderThickness="0" Padding="0" CommandParameter="{Binding}" Margin="3" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<TextBlock FontSize="12" TextAlignment="Center" DockPanel.Dock="Bottom" TextWrapping="Wrap" Text="{Binding Description}" Margin="10"></TextBlock>
</Button>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Name="ButtonWrapPanel" Orientation="Horizontal"></WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
我解决这个问题的方法是创建我自己的滚动查看器控件并覆盖OnManipulationDelta
事件。有了这个,我可以设置 e.CumulativeManipulation.Translation.Length
的阈值,如果大于某个值,则返回base.OnManipulationDelta(e);
否则不返回任何内容。
然后,这似乎以我想要的方式委派事件,并产生降低滚动查看器灵敏度的效果