带有listview的ScrollViewer不会通过鼠标滚轮滚动并触摸

时间:2017-08-22 13:58:52

标签: c# wpf listview touch scrollview

我有一个带有ListView的ScrollViewer。我无法通过鼠标滚轮或触摸滚动ListView内容。例如,

    <ScrollViewer x:Name="MyScroll" IsManipulationEnabled="False">
        <ListView x:Name="MyList" ItemsSource="{Binding Items}"/>
    </ScrollViewer>

问题是ListView在控件模板中有ScrollViewer。你不能拒绝ListView ScrollViewer,它包含GridViewHeaderRowPresenter类。如果将它与ListView一起使用,则需要显示gridview列的标题。

要解决触摸问题,您需要这样做:

  1. 对外部SrcollViewer使用PanningMode属性和Both值。

  2. 在ListView ControlTemplate中为ScrollViewer使用PanningMode属性和None值。

  3. 要解决鼠标滚轮问题,请参阅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>
    

    我希望这个解决方案有助于某人。

0 个答案:

没有答案