1

这是我的代码:

<ScrollViewer Grid.Row="2" CanContentScroll="True">
      <DockPanel>
           <TreeView x:Name="tView" DockPanel.Dock="Top" VerticalAlignment="Stretch">
               [...]
           </TreeView>

           <TreeView Name="pluginsView" DockPanel.Dock="Top" VerticalAlignment="Stretch">
               [...]
           </TreeView>
      </DockPanel>
</ScrollViewer>

我必须定义 2 个 TreeViews。在相同的“区域”中(意思是相同的 [Row, Column])所以我不得不使用面板。我使用了 StackPanel,但显示不是我想要的。我使用了 ScrollViewer,以便在 2 个 TreeViews 垂直不适合“区域”的空间时获得一个通用滚动条。

我遇到的问题是水平的。当我的 2 个 TreeView 中的 1 个太“大”时,我会出现一个滚动条,但仅适用于太大的 TreeView,因此当我滚动时,只有一个 TreeView 水平移动。我想要的是,当我滚动时,我的两个 TreeView 都会水平移动。

不知道够不够清楚,不明白可以上传截图!

我也试过这段代码,但它也不起作用:

<ScrollViewer Grid.Row="2" CanContentScroll="True">
      <Grid Grid.Row="2">
           <Grid.RowDefinitions>
               <RowDefinition Height="Auto" />
               <RowDefinition Height="Auto" />
           </Grid.RowDefinitions>
           <TreeView Grid.Row="0" x:Name="tView" DockPanel.Dock="Top" VerticalAlignment="Stretch">
               [...]
           </TreeView>

           <TreeView Grid.Row="1" Name="pluginsView" DockPanel.Dock="Top" VerticalAlignment="Stretch">
               [...]
           </TreeView>
      </DockPanel>
</ScrollViewer>

但我遇到了完全相同的问题.. :(

4

3 回答 3

6

听起来它正在使用 TreeView 的内部ScrollViewer来滚动内容,而不是外部ScrollViewer

通常这是因为其中的内容ScrollViewer在某种程度上受到了大小限制,因此请确保您没有TreeView以任何方式限制 the 或其父面板的大小。这将包括将垂直/水平对齐设置为拉伸。

这是一个可以在两个方向上平滑滚动的示例。我有点惊讶我必须HorizontalScrollBarVisibility<ScrollViewer>标签中设置才能显示水平滚动条。

<Border BorderBrush="Black" BorderThickness="2" Height="100" Width="100">
    <ScrollViewer CanContentScroll="True"
                  HorizontalScrollBarVisibility="Auto"  
                  VerticalScrollBarVisibility="Auto">
        <DockPanel>
            <Rectangle Height="75" Width="150" Fill="Red" DockPanel.Dock="Top" />
            <Rectangle Height="75" Width="150" Fill="Blue" />
        </DockPanel>
    </ScrollViewer>
</Border>
于 2011-11-29T14:38:35.093 回答
0

尝试禁用ScrollViewer树木的水平。这样包装ScrollViewer就需要打开。

XAML:

<ScrollViewer Grid.Row="2" CanContentScroll="True">
      <Grid>
           <Grid.RowDefinitions>
               <RowDefinition Height="*" />
               <RowDefinition Height="*" />
           </Grid.RowDefinitions>
           <TreeView Grid.Row="0" x:Name="tView" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
               [...]
           </TreeView>

           <TreeView Grid.Row="1" Name="pluginsView" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
               [...]
           </TreeView>
      </Grid>
</ScrollViewer>
于 2011-11-29T14:28:10.377 回答
0

经过数小时的测试,这对我有用:

 <ScrollViewer Grid.Row="2" HorizontalScrollBarVisibility="Auto">
     <DockPanel ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <TreeView x:Name="tView" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
                [...]
            </TreeView>

            <TreeView Name="pluginsView" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
                [...]
            </TreeView>
      </DockPanel>
  </ScrollViewer>

为此,您必须禁用 TreeViews 和 Grid 的可见性,并且您必须在 ScrollViewer 上使用 Horizo​​ntalScrollBarVisibility="Auto" !

于 2011-11-30T13:16:30.460 回答