2017-11-06 49 views
1

私は、タッチスクリーン上で使用されることが意図されたいくつかのボタンを備えたScrollViewerを持っています。私が持っている問題は、ScrollViewerがその中のボタンがタッチダウンイベントを発しているときに、その中のボタンがパンニング/スクロールしているときです。WPF 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> 
+0

の感度を低下させる効果を与えるあなたは代わりに ''タッチアップ=「CommandParse」 'へのタッチダウン=「CommandParseを」'切り替えることができ?。あなたがボタンでパンを放すと、これは同様の問題を引き起こさないだろうと確信しています.... –

+0

@GingerNinja - それを文字通り投稿した後、それはスクロールを許可しますが、イベントそのものは本当に敏感です指を置いたり取り除いたりするボタンや、その断続的なボタンのピクセル単位の精度が必要です。私は前者を推測している。その頭のスクラッチャのビット! – JazziJeff

+0

イベントタイプとして「Click =」に切り替え、 'ClickMode =" Release "を設定しています。これは動作しますが、イベントは「落ち着いた」ものではありません。タッチダウンのように、リレーするのが微妙に遅くなりますが、ちょっと分かりました!私はまだ適切な解決策のために狩りをしています – JazziJeff

答えて

0

私はこれを回避する方法は、自分のscrollviewerコントロールを作成し、OnManipulationDeltaイベントを上書きすることでした。これで私はe.CumulativeManipulation.Translation.Lengthのしきい値を設定することができ、ある値よりも大きい場合はbase.OnManipulationDelta(e);を返します。それ以外の場合は何も返しません。

これは、その後のイベント私は予定の道を委任するようで、ScrollViewerの

関連する問題