我在网格中有两个树视图。该网格在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 -->
答案 0 :(得分:1)
如果我理解正确,那么问题是鼠标悬停在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}" />
答案 1 :(得分:0)
您可以采用以下两个选项之一:
不要使用自定义的scrollViewer,而是通过ScrollChanged
事件和ScrollToVerticalOffset
方法在TreeViews之间同步滚动位置,例如此问题:Synchronized scrolling of two ScrollViewers whenever any one is scrolled in wpf
您可以通过GetChildOfType从TreeView获取ScrollViewer:How to get children of a WPF container by type?
通过ScrollViewers
禁用TreeViews
的{{1}}并添加ScrollViewer.VerticalScrollBarVisibility="Disabled"
,如下所示:ScrollViewer mouse wheel not working。可能WheelScrolling
TreeView
仍在处理您的滚动事件。