4

我正在使用 GridView 来显示项目列表。我需要能够使用鼠标滚轮在包含 GridView 的页面中滚动。这很容易通过覆盖 GridView 的模板来实现

<GridView.Template>
        <ControlTemplate>
            <ItemsPresenter />
        </ControlTemplate>
</GridView.Template>

但是,我还需要可以从触摸设备中选择这些项目。这通常通过向下轻弹一个项目来完成,之后它将被选中。应用上述模板覆盖后,触摸选择机制中断。

我进入 Blend 并开始查看 GridView 的默认模板,如下所示

<ControlTemplate
    TargetType="GridView">
    <Border
        BorderBrush="{TemplateBinding BorderBrush}"
        BorderThickness="{TemplateBinding BorderThickness}"
        Background="{TemplateBinding Background}">
        <ScrollViewer
            x:Name="ScrollViewer"
            BringIntoViewOnFocusChange="{TemplateBinding ScrollViewer.BringIntoViewOnFocusChange}"
            HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}"
            HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
            IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}"
            IsHorizontalScrollChainingEnabled="{TemplateBinding ScrollViewer.IsHorizontalScrollChainingEnabled}"
            IsVerticalScrollChainingEnabled="{TemplateBinding ScrollViewer.IsVerticalScrollChainingEnabled}"
            IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}"
            IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}"
            TabNavigation="{TemplateBinding TabNavigation}"
            VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
            VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}"
            ZoomMode="{TemplateBinding ScrollViewer.ZoomMode}">
            <ItemsPresenter
                HeaderTemplate="{TemplateBinding HeaderTemplate}"
                Header="{TemplateBinding Header}"
                HeaderTransitions="{TemplateBinding HeaderTransitions}"
                Padding="{TemplateBinding Padding}" />
        </ScrollViewer>
    </Border>
</ControlTemplate>

如果我删除 ScrollViewer 或以任何方式禁用水平滚动部分,则触摸选择将停止工作。

如何同时启用鼠标滚动和触摸选择?

澄清一下,我不需要这些动作同时发生。两者只需要在同一个页面上为同一个 GridView 单独工作。

4

1 回答 1

5

我不认为你的情况是可能的。里面有网格的 SV 是问题所在。MSDN 文档说 GridView 防止 PointerWheelChanged 事件冒泡:

请参阅GridView 文档:

警告 PointerWheelChanged 事件不会从 GridView 冒泡。这意味着如果指针位于 GridView 上,则内部具有 GridView 的控件不会收到鼠标滚轮更改消息。例如,如果您将 GridView 放在 ScrollViewer 内,则当指针位于 GridView 上方时,您无法使用鼠标滚轮滚动 ScrollViewer。

于 2012-12-19T23:03:04.743 回答