【问题标题】:Enable scroll for WPF Treeview为 WPF Treeview 启用滚动
【发布时间】:2017-11-04 08:29:44
【问题描述】:

谁能帮我解决如何启用树视图滚动?必须有一个简单的方法,但我不能让它在我的代码中工作。经过多次失败的尝试,我目前有这样的事情:

        <ScrollViewer CanContentScroll="True">
           <TreeView ...>
           </TreeView>
        </ScrollViewer>

我确实看到了一个“禁用”滚动条,但是当树视图的注释大于屏幕高度时,不会激活滚动。

【问题讨论】:

    标签: wpf treeview scroll


    【解决方案1】:

    TreeView 控件本身在其模板中包含一个ScrollViewer。您应该能够在适当的主机内使用TreeView(而不是StackPanel!)。

    【讨论】:

    • 什么是合适的主机?不过,我的 TreeView 确实位于 StackPanel 内。
    • 我认为他在谈论 ScrollViewer 不是适当的主机,至于“不是 StackPanel!”部分,我不太明白,如果在 Grid、StackPanel、WrapPanel、UniformGrid 等中使用 TreeView 的行为应该没有区别。
    • A StackPanel 为其子项要求的任何宽度(当方向为水平时)或高度(当方向为垂直时)提供其内容。因此,如果您将TreeView(或ListBox,或其他)放在StackPanel 中,那么TreeView 将认为它有足够的高度来显示所有项目而无需ScrollBar。事实上,TreeView 将被切断,因为您将耗尽屏幕空间。请改用Grid
    • 仅由于 Kent Boogaart 的评论 +1,我能够在自己的工作中解决此问题。只需将您的树视图包装在网格括号中。
    • 即使你将TreeView包裹在一个ScrollViewer中,并设置了ScrollViewer的Width和Height,StackPanel仍然会搞乱滚动。我会认为孩子的宽度/高度约束会满足 StackPanel。但事实并非如此。避免像瘟疫一样在 StackPanels 下使用 TreeView。正如其他人所验证的那样,设置了 Width/Height 和 TreeView 的简单 Grid 可以正确滚动。
    【解决方案2】:

    TreeView 包含一个 ScrollViewer,但正如@Carlo 所说,TreeView 或其容器需要有一个高度。或者,TreeView 应该托管在一个不会为其子级提供无限高度的容器中(即我认为 @Kent 的意思的 StackPanel)。所以把它放在一个网格里,不需要给网格或树视图一个明确的高度,你应该得到滚动条。

    【讨论】:

      【解决方案3】:

      您是否在窗口上明确设置了高度?如果你想看到滚动条,必须定义 TreeView 或其容器的高度,否则它不知道何时需要显示滚动条。

      例子:

      <Window x:Class="StackOverflowTests.Window1"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          Title="Window1" x:Name="window1" Height="300" Width="300">
          <Grid>
              <TreeView  Name="treeView1" Height="150" VerticalAlignment="Top">
                  <TreeViewItem Header="Root" IsExpanded="True">
                      <TreeViewItem Header="Item 1"></TreeViewItem>
                      <TreeViewItem Header="Item 2"></TreeViewItem>
                      <TreeViewItem Header="Item 3"></TreeViewItem>
                      <TreeViewItem Header="Item 4"></TreeViewItem>
                      <TreeViewItem Header="Item 5"></TreeViewItem>
                      <TreeViewItem Header="Item 6"></TreeViewItem>
                      <TreeViewItem Header="Item 7"></TreeViewItem>
                      <TreeViewItem Header="Item 8"></TreeViewItem>
                      <TreeViewItem Header="Item 9"></TreeViewItem>
                      <TreeViewItem Header="Item 10"></TreeViewItem>
                      <TreeViewItem Header="Item 11"></TreeViewItem>
                      <TreeViewItem Header="Item 12"></TreeViewItem>
                      <TreeViewItem Header="Item 13"></TreeViewItem>
                      <TreeViewItem Header="Item 14"></TreeViewItem>
                      <TreeViewItem Header="Item 15"></TreeViewItem>
                      <TreeViewItem Header="Item 16"></TreeViewItem>
                      <TreeViewItem Header="Item 17"></TreeViewItem>
                      <TreeViewItem Header="Item 18"></TreeViewItem>
                      <TreeViewItem Header="Item 19"></TreeViewItem>
                      <TreeViewItem Header="Item 20"></TreeViewItem>
                      <TreeViewItem Header="Item 21"></TreeViewItem>
                      <TreeViewItem Header="Item 22"></TreeViewItem>
                      <TreeViewItem Header="Item 23"></TreeViewItem>
                      <TreeViewItem Header="Item 24"></TreeViewItem>
                      <TreeViewItem Header="Item 24"></TreeViewItem>
                  </TreeViewItem>
              </TreeView>
          </Grid>
      </Window>
      

      【讨论】:

      • 抱歉,尝试向树视图及其容器添加高度但没有成功
      • 嗯,我确实得到了滚动条,我将我的示例添加到我的答案中,看看它是否有效,基本上窗口的高度设置为 300,树视图的高度设置为 150,所以树视图是窗口的一半高,如果它的项目超出高度,它会得到一个滚动条。
      【解决方案4】:

      只需给 TreeView 一个固定的高度和宽度。也许把它放在一个边界。另外,我的项目内容上确实有一个 MaxWidth。例如,以下是在我的两个堆栈面板下的主窗口中,它可以工作(我正在使用 MahApps Metro 控件):

      <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
              <Border BorderThickness="2" BorderBrush="DarkGoldenrod" Margin="4">
              <TreeView x:Name="TreeView" Width="400" Height="800" Focusable="True" VerticalAlignment="Top">
              </TreeView>            
          </Border>
      </StackPanel>
      

      【讨论】:

        【解决方案5】:

        您可以使用扩展器代替树视图。哪个可以正确使用滚动视图,这与 Treeview 相同。

        【讨论】:

          【解决方案6】:

          将高度和宽度设置为固定值怎么样? 我知道这可能不是每个人的答案。

          【讨论】:

          • 据我所知,这根本没有回答问题what 的高度和宽度应该固定?那将如何启用滚动条?
          • 请再次阅读问题。 “我确实看到了一个‘禁用’的滚动条,但是当树视图的注释大于屏幕高度时,不会激活滚动。”在树视图上设置高度和宽度。这实际上是在我上面的帖子中提到的。如果我确切地记得,一旦树视图上的高度和宽度被固定,当主窗口调整大小时,滚动条就会出现。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多