WPF: TreeView或TreeListView标题水平滚动问题

5
我从这里下载了TreeListView。当数据被裁剪时,它没有显示水平或垂直滚动条。就像这样
因此,我将其风格更改为:
<Style TargetType="{x:Type l:TreeListView}">
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility"
            Value="Auto" />
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility"
            Value="Auto" />
    <Setter Property="VerticalContentAlignment"
            Value="Center" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type l:TreeListView}">
                <Border BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <DockPanel>
                        <GridViewHeaderRowPresenter Columns="{StaticResource gvcc}"
                                                    DockPanel.Dock="Top" />
                        <ScrollViewer x:Name="_tv_scrollviewer_"
                                      Background="{TemplateBinding Background}"
                                      CanContentScroll="False"
                                      Focusable="True"
                                      HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
                                      Padding="{TemplateBinding Padding}"
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                      VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}">
                            <ItemsPresenter />
                        </ScrollViewer>
                    </DockPanel>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="VirtualizingStackPanel.IsVirtualizing"
                             Value="true">
                        <Setter Property="CanContentScroll"
                                TargetName="_tv_scrollviewer_"
                                Value="true" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

竖向滚动条很好,但问题在于横向滚动条。当数据水平截断,且滚动条向右移动时,数据会向右移动,但标题却停留在原地。就像这样。

如何解决这个问题,使树形项水平滚动时,标题也跟随其移动。我不允许将标题放入滚动视图中,因为当数据垂直滚动时它们需要可见。


UI问题非常烦人。你尝试过其他供应商的控件,比如DevExpress吗? - Kelmen
@Kelmen:没有第三方控件,只使用免费控件。 - Nikhil Agrawal
@Nikhil,你有没有在这方面取得任何进展?我也遇到了完全相同的问题。谢谢,Ted - Ted
@Ted:请查看Alina的回答。 - Nikhil Agrawal
3个回答

1
如果您想让完整的树形视图(包括标题)水平滚动,另外添加一个像这样的滚动条:
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" >
    <Treeview/>
</ScrollViewer>

0

我曾经遇到过这种树的问题,现在通过同步滚动条已经解决了。我在GridViewHeaderRowPresenter中添加了一个水平隐藏且垂直禁用的滚动条,并使用了来自codeproject的代码来实现滚动条的同步。

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

库的链接 http://www.codeproject.com/Tips/564665/Synchronize-Two-Scroll-Viewers-in-WPF 和该库的原始文章 http://www.codeproject.com/Articles/39244/Scroll-Synchronization


0

我相信设置HorizontalScrollBarVisibility="Disabled"应该强制滚动视图器内部的内容。当滚动条被禁用时,它应该防止渲染出现问题。这实际上是几个版本以来的一个问题。我不确定它是否已经在最新的WPF中修复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接