web-dev-qa-db-ja.com

scrollviewer内のListviewは、scrollviewerのスクロールを防ぎます

いくつかのリストボックスが含まれているスクロールビューアがあります。問題は、マウスがリストビュー上にあるときに、ユーザーがマウスの中ローラーを使用してスクロールビューアーをスクロールする場合です。リストビューは、内部のスクロールビューアーを一番下までスクロールしてから、マウスをキャプチャし続け、含まれているスクロールビューアーがスクロールできないようにします。

これを処理する方法についてのアイデアはありますか?

23
ConditionRacer

これは、ListView(実際にはListBox)のコンテンツテンプレートがそのアイテムをScrollViewerでラップするために発生します。

最も簡単な方法は、Templateを作成しない内部ListViewに独自のScrollViewerをドロップして無効にすることです。

    <ListView>
      <ListView.Template>
        <ControlTemplate>
          <ItemsPresenter></ItemsPresenter>
        </ControlTemplate>
      </ListView.Template>
      ...
    </ListView>

ところで、ListView内にListViewがある場合も同じことが起こります(これは私の場合でした)。

47
Kos

ListView'sScrollBarsを無効にしてみましたか?

<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled"
          ScrollViewer.VerticalScrollBarVisibility="Disabled" />
3
Rachel

IMO、このシナリオを処理する最良の方法は、カスタムコントロールを作成することです。

     class MyScrollViewer : ScrollViewer
     {
         protected override void OnPreviewMouseWheel(MouseWheelEventArgs e)
         {
            base.OnPreviewMouseWheel(e);
            if (!e.Handled)
            {
                e.Handled = true;
                this.RaiseEvent(new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
                {
                    RoutedEvent = UIElement.MouseWheelEvent,
                    Source = this
                });
            }
        }
    }
1
Poppyto

内側のリストビューをscrollviewerでラップすると、スクロールが機能します。

<ListView ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">
                <ListView>
                    <ListView.ItemTemplate>
                        <DataTemplate>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </ScrollViewer>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
0