为什么鼠标滚轮在ScrollViewer中滚动?

时间:2011-11-27 18:12:21

标签: wpf treeview scrollviewer

我在TreeView周围添加ScrollViewer有两个原因:

  1. 我希望更多地控制TreeView滚动条的显示方式

  2. 我想要更多地控制我的TreeView滚动条位置,因为我想同步一些树视图。

  3. 似乎只要在TreeView周围添加ScrollView,我就无法使用鼠标滚动器滚动它。

    我想我的问题是2部分。通过添加我自己的ScrollView获得任何东西,这是设计的这种行为吗?

2 个答案:

答案 0 :(得分:3)

我认为您的任何一项要求都不会妨碍使用ScrollViewer模板中的TreeView。您可能需要重新模板TreeView才能实现目标。

这也说明了为什么滚动无法按预期工作。您实际上在ScrollViewer附近获得ScrollViewer。你需要做的就是从TreeView模板中删除ScrollViewer,或者禁用它:

<TreeView ScrollViewer.VerticalScrollBarVisibility="Disabled" ...>

那就是说,我认为在你的情况下更好的选择可能是重新模板/重新设计TreeView本身。

答案 1 :(得分:1)

您可以重新模拟树视图以删除内部滚动查看器

<ScrollViewer Height="200" Width="200">
  <TreeView>
    <TreeView.Resources>
      <Style TargetType="{x:Type TreeView}">
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="TreeView">
              <Border Name="Border"
                      BorderBrush="{TemplateBinding BorderBrush}"
                      Background="{TemplateBinding Background}"
                      CornerRadius="1"
                      BorderThickness="1">
                <ItemsPresenter />
              </Border>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
    </TreeView.Resources>
    <TreeViewItem IsExpanded="True">Test001</TreeViewItem>
    <TreeViewItem IsExpanded="True">Test002</TreeViewItem>
    <TreeViewItem IsExpanded="True">Test003</TreeViewItem>
    <TreeViewItem IsExpanded="True">Test004</TreeViewItem>
    <TreeViewItem IsExpanded="True">Test005</TreeViewItem>
    <TreeViewItem IsExpanded="True">Test006</TreeViewItem>
    <TreeViewItem IsExpanded="True">Test007</TreeViewItem>
    <TreeViewItem IsExpanded="True">Test008</TreeViewItem>
    <TreeViewItem IsExpanded="True">Test009</TreeViewItem>
  </TreeView>
</ScrollViewer>