WPF ScrollViewer在平移时触发子项触摸事件

时间:2017-11-06 13:23:51

标签: c# wpf scrollviewer

我有一个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>

1 个答案:

答案 0 :(得分:0)

我解决这个问题的方法是创建自己的scrollviewer控件并覆盖OnManipulationDelta事件。有了这个,我可以设置e.CumulativeManipulation.Translation.Length的阈值,如果大于某个值,则返回base.OnManipulationDelta(e);,否则不返回任何内容。

这似乎按照我想要的方式委托事件,并给出降低滚动查看器灵敏度的效果