我有一个设置为包含多个HubSections的垂直方向的集线器。在每个HubSections中都是一个水平滚动的网格视图。有关类似布局的示例,请查看Windows应用商店的主屏幕。
我想阻止鼠标滚动水平移动列表,而是继续垂直滚动。我有适当的图像,类似于Windows应用商店,允许用户手动滑动网格视图。我还想启用滑动来移动列表,类似于商店。
我尝试从GridView派生控件并覆盖PointerWheelChanged事件,但它从未进入该事件,因为我认为内部滚动查看器正在接管。我试图从ScrollViewer派生,但它是密封的,无法完成。
我在ItemsPanelTemplate中使用了ItemsWrapGrid,所以也许有些内容我可以覆盖......
答案 0 :(得分:0)
以这篇文章为例,我能够解决这个问题:
Pivot inside a ScrollViewer, scrollviewer wont scroll
使用VisualTreeExtensions,我必须找到并将此方法应用于包含ScrollContentPresenter的Grid。我在网格视图的OnLoaded事件中这样做了。
private void gridView_Loaded(object sender, RoutedEventArgs e)
{
var gridView = VisualTreeHelper.GetChild(this, 0) as FrameworkElement;
var grids = gridView.GetDescendantsOfType<Grid>().ToList();
var oneIWant = grids.Where(x => x.Children.Any(y => y.GetType() == typeof(ScrollContentPresenter))).First();
oneIWant.PointerWheelChanged += ScrollViewer_PointerWheelChanged;
}
不优雅,但它现在应该到期。我对可能存在的任何其他选项持开放态度。