我在ScrollViewer中有一个TreeView。 当我在树视图上转动鼠标滚轮时,树视图不会滑动并且它保持在同一点。但是当我移动滚动条时,我可以滑动树视图。
我非常确定treeview有滚动查看器,但我的意思是使用其他滚动查看器,我是一个scrollviwer模板,我在我的应用程序中使用了这个模板。这就是我想再次使用这个模板的原因。
以下是代码:
<ScrollViewer Template="{DynamicResource AppleStyleScrollBarStyle}">
<TreeView>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
</TreeView>
</ScrollViewer>
答案 0 :(得分:5)
这个答案对我有所帮助: WPF Remove ScrollViewer from TreeView
https://serialseb.com/blog/2007/09/03/wpf-tips-6-preventing-scrollviewer-from/
只需订阅您的treeView的PreviewMouseWheel事件:
// https://serialseb.com/blog/2007/09/03/wpf-tips-6-preventing-scrollviewer-from/
private void treeView_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (sender is TreeView && !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);
}
}
答案 1 :(得分:2)
TreeView
默认模板已包含ScrollViewer
。当你将它包装在另一个ScrollViewer
中时,TreeView
内的一个只会处理鼠标滚轮等鼠标事件。相反,您可以在Style
ScrollViewer
创建隐式TreeView.Resources
<TreeView>
<TreeView.Resources>
<Style TargetType="{x:Type ScrollViewer}">
<Setter Property="Template" Value="{DynamicResource AppleStyleScrollBarStyle}"/>
</Style>
</TreeView.Resources>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
<TreeViewItem Header="TreeViewItem"/>
</TreeView>