[英]WPF TreeView in ScrollView: How to enable scrolling with mouse over TreeView
我在网格中有两个树视图。 该网格在ScrollView中。 (这样做的原因是使ob view的两个树节点始终处于相同的相对深度)。
现在,我的问题是,当鼠标悬停在“树”上并使用鼠标滚轮时,“滚动”视图不滚动。 当我将鼠标悬停在另一个内部视图(ConnectionView)上时,它工作正常。
我的观点:
<!-- Window -->
<ScrollViewer VerticalScrollBarVisibility="Visible">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TreeView Grid.Column="0" ItemsSource="{Binding Path=TreeNodesLeft}" >
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding ChildNodes}" >
<local:TreeNodeView />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<!--styles -->
</TreeView>
<Grid Grid.Column="1" >
<local:ConnectionView DataContext="{Binding Path=Connections}" />
</Grid>
<TreeView Grid.Column="2" ItemsSource="{Binding Path=TreeNodesRight}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding ChildNodes}" >
<local:TreeNodeView />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<!--styles -->
</TreeView>
</Grid>
</ScrollViewer>
<!-- Window -->
如果我理解正确,那么问题是鼠标悬停在Treeview控件(TreeNodesLeft / TreeNodesLeft)上时滚动无法正常工作? 如果是这种情况,那是因为treeview有它自己的内部scrollviewer,所以当鼠标悬停在它上面时,scrollviewr就会起作用。 您必须编辑树视图的模板才能删除滚动视图。
将以下内容添加到树视图中
<TreeView.Template>
<ControlTemplate>
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="
{TemplateBinding BorderThickness}" SnapsToDevicePixels="true">
<ItemsPresenter/>
</Border>
</ControlTemplate>
</TreeView.Template>
或将其添加为静态资源并重复使用
<ControlTemplate x:Key="NoScrollViewerTemplate">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true">
<ItemsPresenter/>
</Border>
</ControlTemplate>
<TreeView Template="{StaticResource NoScrollViewerTemplate}" />
您可以遵循以下两个选项之一:
不要使用自定义的scrollViewer,而是通过ScrollChanged
事件和ScrollToVerticalOffset
方法在TreeViews之间同步滚动位置,例如以下问题: 在wpf中滚动任何两个时,同步滚动两个ScrollViewer您可以通过GetChildOfType从TreeView获取ScrollViewer: 如何获取a的子级WPF容器按类型?
禁用ScrollViewers
两者TreeViews
通过ScrollViewer.VerticalScrollBarVisibility="Disabled"
,并添加WheelScrolling
喜欢在这里: ScrollViewer中鼠标滚轮不工作 。 可能TreeView
ScrollViewers
仍在处理您的滚动事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.