无法在ScrollViewer中滚动TreeView

时间:2015-01-27 12:50:15

标签: wpf treeview scrollviewer

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

我非常确定treeview有滚动查看器,但我的意思是使用其他滚动查看器,我是一个scrollviwer模板,我在我的应用程序中使用了这个模板。这就是我想再次使用这个模板的原因。

以下是代码:

<ScrollViewer Template="{DynamicResource AppleStyleScrollBarStyle}">
    <TreeView>
        <TreeViewItem Header="TreeViewItem"/>
        <TreeViewItem Header="TreeViewItem"/>
        <TreeViewItem Header="TreeViewItem"/>
        <TreeViewItem Header="TreeViewItem"/>
      </TreeView>
</ScrollViewer>

2 个答案:

答案 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>