我有一个带有ListView的ScrollViewer。我无法通过鼠标滚轮或触摸滚动ListView内容。例如,
<ScrollViewer x:Name="MyScroll" IsManipulationEnabled="False">
<ListView x:Name="MyList" ItemsSource="{Binding Items}"/>
</ScrollViewer>
问题是ListView在控件模板中有ScrollViewer。你不能拒绝ListView ScrollViewer,它包含GridViewHeaderRowPresenter类。如果将它与ListView一起使用,则需要显示gridview列的标题。
要解决触摸问题,您需要这样做:
对外部SrcollViewer使用PanningMode属性和Both值。
在ListView ControlTemplate中为ScrollViewer使用PanningMode属性和None值。
要解决鼠标滚轮问题,请参阅https://stackoverflow.com/a/7003338/7819575使用附加行为。
结果我们得到下一个代码:
<ScrollViewer x:Name="MyScroll" PanningMode="Both">
<ListView x:Name="MyList" ItemsSource="{Binding Items}">
<ListView.Template>
<ControlTemplate TargetType="{x:Type ListView}">
<Themes:ListBoxChrome x:Name="Bd" ...>
<ScrollViewer PanningMode="None" ...>
<ItemsPresenter .../>
</ScrollViewer>
</Themes:ListBoxChrome>
<ControlTemplate.Triggers>
...
</ControlTemplate.Triggers>
</ControlTemplate>
</ListView.Template>
<i:Interaction.Behaviors>
<behaviors:IgnoreMouseWheelBehavior />
</i:Interaction.Behaviors>
</ListView>
</ScrollViewer>
我希望这个解决方案有助于某人。