我目前正在构建一个Windows 8 XAML C#应用程序。在页面中,我有一个用于水平滑动和滚动的滚动查看器。我有几个控件在scorllviewer中工作得很好。但是当你滚动并且你的光标位于ListView/GridView之上时,那个控件将处理scrollnig而不是scrollviewer。 滑动这不会发生,但与鼠标滚轮停止scrollvieweing滚动。 有人知道如何禁用此行为或有解决方法吗?ScrollViewer GridView XAML
5
A
回答
0
这也是我看到的问题。它不存在触摸 - 只有在使用鼠标滚轮时才会出现。我还不知道解决方法。我不认为有一个。
1
在处理了这个问题很长一段时间后,我决定改变策略。至少在我的解决方案中,我将内部GridView更改为仅为ItemsControl。这样我就可以处理所有的点击/点按操作,但仍然可以按照预期的方式进行滚动。
当然,这个解决方案不适合每个人,因为有时候您还需要所有选择内容。但对我来说,它的工作原理是我只需要点击/点击项目。
希望它可以帮助
0
我在这里找到一个解决办法:msdn workaround
Basicly你必须做到以下几点:
基地XAML:
<Grid Name="BaseElement">
<ScrollViewer Name="MainScrollViewer" Style="{StaticResource HorizontalScrollViewerStyle}" VerticalScrollMode="Auto">
<GridView />
<GridView />
</ScrollViewer>
</Grid>
添加新处理根元素:
BaseElement.AddHandler(PointerWheelChangedEvent, new PointerEventHandler(Bubble_PointerWheelChanged), true);
实现处理程序来韩德尔滚动:
private void Bubble_PointerWheelChanged(object sender, PointerRoutedEventArgs e) { // Could walk up the tree to find the next SV or just have a reference like here: MainScrollViewer.ScrollToHorizontalOffset(MainScrollViewer.HorizontalOffset - e.GetCurrentPoint(null).Properties.MouseWheelDelta); }
0
我也有同样的问题。然后我试图从网格模板移除滚动条,如下线程提到..它为我工作很好..
0
最佳解决方案不断。
public class CustomGridView : GridView
{
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
var sv = this.GetTemplateChild("ScrollViewer") as UIElement;
if (sv != null)
sv.AddHandler(UIElement.PointerWheelChangedEvent, new PointerEventHandler(OnPointerWheelChanged), true);
}
private void OnPointerWheelChanged(object sender, PointerRoutedEventArgs e)
{
e.Handled = false;
}
}
0
1.增加验证码在View.cs:
private void ThumbnailViewer_OnMouseWheel(object sender, MouseWheelEventArgs e)
{
ThumbnailViewerScroller.ScrollToHorizontalOffset(ThumbnailViewerScroller.HorizontalOffset - e.Delta);
}
2.加代码在XAML:
<ScrollViewer
x:Name="ViewerScroller"
MouseWheel="ThumbnailViewer_OnMouseWheel">
<StackPanel>
...
</StackPanel>
</ScrollViewer>
请您总结一下在链接你的答案。 – michaelb958 2013-06-02 05:17:44