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

时间:2013-04-23 06:02:36

标签: c# wpf vb.net treeview treelistview

我从here下载了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>

垂直滚动条很好。但问题是水平Scollbar。当数据被水平剪切,并且滚动条向右移动时,数据向右移动但是标题保持原样。像这样。

如何克服这个问题,当treeitem水平滚动时,标题会随之移动。我不允许在scrollviewer中放置标题,因为在垂直滚动数据时它们需要可见。

3 个答案:

答案 0 :(得分:0)

我相信设置HorizontalScrollBarVisibility="Disabled"应该强制滚动查看器的内容。滚动条被禁用后,应该防止它变脏。这实际上是几个版本的问题。我不确定它是否已在最新的WPF中修复。

答案 1 :(得分:0)

如果您希望完整的树视图(包括标题)水平滚动,请另外添加如下的滚动查看器:

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" >
    <Treeview/>
</ScrollViewer>

答案 2 :(得分:0)

我对这种树有同样的问题,现在通过sincronizing滚动条解决了。我向GridViewHeaderRowPresenter添加了一个滚动条,它被水平隐藏并垂直禁用,我使用了codeproject的代码,它已经实现了滚动条的sincronization。

<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 以及lib http://www.codeproject.com/Articles/39244/Scroll-Synchronization的原始文章。