无法在ScrollViewer中滚动TreeView

cKN*_*Net 6 wpf treeview scrollviewer

我在ScrollViewer中有一个TreeView。当我在treeview上转动鼠标滚轮,treeview不会滑动并且停留在同一点。但是,当我移动滚动条时,可以滑动树形视图。

我很确定treeview有一个scrollviewer,但是我的意思是要使用另一个scrollviewer,我有一个scrollviwer模板,并且在整个应用程序中都使用了这个模板。这就是为什么我要再次使用此模板。

这是代码:

<ScrollViewer Template="{DynamicResource AppleStyleScrollBarStyle}">
    <TreeView>
        <TreeViewItem Header="TreeViewItem"/>
        <TreeViewItem Header="TreeViewItem"/>
        <TreeViewItem Header="TreeViewItem"/>
        <TreeViewItem Header="TreeViewItem"/>
      </TreeView>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

Kir*_*kov 7

这个答案对我有帮助: WPF从TreeView中删除ScrollViewer

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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 超!我将它用于StackPanel的DockPanel中的TreeView,就可以了。 (2认同)

dko*_*ozl 2

TreeView默认模板已包含ScrollViewer. 当你将它包裹在另一个中时ScrollViewer,里面的那个TreeView什么都不做,但仍然处理一些鼠标事件,例如鼠标滚轮。相反,您可以创建隐式Stylefor ScrollViewerinTreeView.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>
Run Code Online (Sandbox Code Playgroud)