現在、Windows 8 XAML C# アプリケーションを構築しています。ページには、水平スワイプとスクロール用のスクロールビューアがあります。scorllviewer と非常にうまく連携するいくつかのコントロールがあります。ただし、スクロールしてカーソルが ListView / GridView の上にある場合、そのコントロールは scrollviewer の代わりに scrollnig を処理します。スワイプではこれは起こりませんが、マウスのスクロールホイールではスクロールビューのスクロールが停止します。この動作を無効にする方法や回避策を知っている人はいますか?
6 に答える
1.View.cs に次のコードを追加します。
private void ThumbnailViewer_OnMouseWheel(object sender, MouseWheelEventArgs e)
{
ThumbnailViewerScroller.ScrollToHorizontalOffset(ThumbnailViewerScroller.HorizontalOffset - e.Delta);
}
2.Xaml にコードを追加します。
<ScrollViewer
x:Name="ViewerScroller"
MouseWheel="ThumbnailViewer_OnMouseWheel">
<StackPanel>
...
</StackPanel>
</ScrollViewer>
ここで回避策を見つけました: msdn 回避策
基本的に、次のことを行う必要があります。
ベース XAML:
<Grid Name="BaseElement">
<ScrollViewer Name="MainScrollViewer" Style="{StaticResource HorizontalScrollViewerStyle}" VerticalScrollMode="Auto">
<GridView />
<GridView />
</ScrollViewer>
</Grid>
ルート要素に新しい Handler を追加します。
BaseElement.AddHandler(PointerWheelChangedEvent, new PointerEventHandler(Bubble_PointerWheelChanged), true);
スクロールを処理するハンドラを実装します。
private void Bubble_PointerWheelChanged(object sender, PointerRoutedEventArgs e) { // Could walk up the tree to find the next SV or just have a reference like here: MainScrollViewer.ScrollToHorizontalOffset(MainScrollViewer.HorizontalOffset - e.GetCurrentPoint(null).Properties.MouseWheelDelta); }
かなり長い間この問題に取り組んだ後、私は戦術を変えることにしました。少なくとも私のソリューションでは、内部のGridViewを単なるItemsControlに変更しました。そうすれば、すべてのクリック/タップを処理しながら、スクロールを期待どおりに機能させることができます。
もちろん、このソリューションは万人向けではありません。すべての選択項目が必要になる場合もあります。しかし、アイテムのクリック/タップだけが必要だったので、私にとってはうまくいきました。
それが役に立てば幸い
史上最高のソリューション。
public class CustomGridView : GridView
{
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
var sv = this.GetTemplateChild("ScrollViewer") as UIElement;
if (sv != null)
sv.AddHandler(UIElement.PointerWheelChangedEvent, new PointerEventHandler(OnPointerWheelChanged), true);
}
private void OnPointerWheelChanged(object sender, PointerRoutedEventArgs e)
{
e.Handled = false;
}
}
私も同じ問題を抱えていました。次に、以下のスレッドで説明されているように、Grid テンプレートからスクロールバーを削除しようとしました..それは私にとってはうまくいきました..
これは私も見ている問題です。タッチでは発生しません。マウス ホイールを使用した場合にのみ発生するようです。回避策はまだわかりません。1つもないと思います。