いくつかのリストボックスが含まれているスクロールビューアがあります。問題は、マウスがリストビュー上にあるときに、ユーザーがマウスの中ローラーを使用してスクロールビューアーをスクロールする場合です。リストビューは、内部のスクロールビューアーを一番下までスクロールしてから、マウスをキャプチャし続け、含まれているスクロールビューアーがスクロールできないようにします。
これを処理する方法についてのアイデアはありますか?
これは、ListView
(実際にはListBox
)のコンテンツテンプレートがそのアイテムをScrollViewer
でラップするために発生します。
最も簡単な方法は、Template
を作成しない内部ListView
に独自のScrollViewer
をドロップして無効にすることです。
<ListView>
<ListView.Template>
<ControlTemplate>
<ItemsPresenter></ItemsPresenter>
</ControlTemplate>
</ListView.Template>
...
</ListView>
ところで、ListView内にListViewがある場合も同じことが起こります(これは私の場合でした)。
ListView's
ScrollBars
を無効にしてみましたか?
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Disabled" />
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
});
}
}
}
内側のリストビューを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>