WPF从TreeView中删除ScrollViewer

我想知道是否可以轻松关闭TreeView的ScrollViewer。

我有一个带网格的UserControl。 其中一个Cell在Stackpanel中有一些TreeView。 Control的高度根据TreeView的高度自动调整,因此不需要滚动条。

问题是:我在ListBox中有很多这些具有自己的ScrollViewer,但是当我使用MouseWheel时,当你在TreeView上时滚动停止。

这是因为TreeView有自己的ScrollViewer来窃取MouseWheel。 我知道这可能是通过覆盖控件模板来实现的,但我希望有一种更简单的方法。

您可以使用此处描述的技术: http : //serialseb.blogspot.com/2007/09/wpf-tips-6-preventing-scrollviewer-from.html,以防止ScrollViewer处理鼠标滚轮事件。 将PreviewMouseWheel="HandlePreviewMouseWheel"添加到TreeView并将HandlePreviewMouseWheel定义为:

 private void HandlePreviewMouseWheel(object sender, MouseWheelEventArgs e) { if (!e.Handled) { e.Handled = true; var eventArg = new MouseWheelEventArgs( e.MouseDevice, e.Timestamp, e.Delta); eventArg.RoutedEvent = UIElement.MouseWheelEvent; eventArg.Source = sender; var parent = ((Control)sender).Parent as UIElement; parent.RaiseEvent(eventArg); } } 

但是,将控件模板更改为不包含ScrollViewer并不是那么难,因为TreeView的默认模板非常简单,而且大部分复杂性都是处理ScrollViewer。 试着这样做: