Windows 8 启用鼠标滚动,同时保持触摸选定项目的能力
我正在使用GridView显示项目列表。我需要能够使用鼠标滚轮在包含GridView的页面中滚动。这可以通过覆盖GridView的模板轻松实现Windows 8 启用鼠标滚动,同时保持触摸选定项目的能力,windows-8,windows-runtime,winrt-xaml,Windows 8,Windows Runtime,Winrt Xaml,我正在使用GridView显示项目列表。我需要能够使用鼠标滚轮在包含GridView的页面中滚动。这可以通过覆盖GridView的模板轻松实现 <GridView.Template> <ControlTemplate> <ItemsPresenter /> </ControlTemplate> </GridView.Template> 但是,我还需要从触摸设备中选择这些项目。
<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分别工作。我认为您的方案不可能实现。有网格的SV是问题所在。MSDN文档说GridView阻止PointerHeelChanged事件冒泡: 见 注意:PointerHeelChanged事件不会从GridView冒泡出现。这意味着,如果指针位于GridView上,则其内部具有GridView的控件不会接收鼠标滚轮更改消息。例如,如果将GridView放在ScrollViewer中,当指针位于GridView上时,无法使用鼠标滚轮滚动ScrollViewer
在更改控件模板时,您可能使用了错误的方法。下面的链接是否解决了您要做的事情?不,到目前为止,水平滚动和触摸拖动选择似乎是相互排斥的。对不起,我还没有鼠标来测试这一点(一直在路上)。现在我知道了。我可以用滚轮滚动,并使用上面链接中的设置在网格中拖动选择。您是否有可能使用VS模拟器进行测试?如果是这样的话,你必须先在模拟器内用鼠标左键点击你的应用程序,然后它才会注册滚轮。在模拟器之外,您不必这样做。如果它是页面中唯一的元素,它就会工作。我有很多其他的内容,所以我需要一个滚动查看器来浏览所有的内容。一旦GridView被另一个SV'er包围,它将停止响应鼠标滚轮。这不起作用:对此发表评论。它似乎不再是8.1中的问题。还没有检查它是否在8.0中也已修复。