I had the same issue with this kind of tree and now is solved by sincronizing scrollbars. I added a scroll bar to the GridViewHeaderRowPresenter that is hidded horizontaly and disabled vertically, and I used a code from codeproject that already implements sincronization of scrollbars.
<DockPanel>
<ScrollViewer DockPanel.Dock="Top" HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility ="Disabled"
controls:ScrollSynchronizer.ScrollGroup="Group1">
<GridViewHeaderRowPresenter Columns="{StaticResource gvcc}"/>
</ScrollViewer>
<ScrollViewer
HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
controls:ScrollSynchronizer.ScrollGroup="Group1">
<ItemsPresenter />
</ScrollViewer>
</DockPanel>
Link to the library http://www.codeproject.com/Tips/564665/Synchronize-Two-Scroll-Viewers-in-WPF and the original article for the lib http://www.codeproject.com/Articles/39244/Scroll-Synchronization.