DockPanel的元素共享相同的滚动条?

时间:2011-11-29 08:43:19

标签: wpf xaml scrollview dockpanel

这是我的代码:

<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。有相同的“区域”(平均相同的[行,列])所以我不得不使用Panel。我使用了StackPanel,但显示器不是我想要的。 我使用ScrollViewer,以便当它们不垂直适合“区域”的空间时,我得到2个TreeViews的通用滚动条。

我遇到的问题是横向问题。当我的2个TreeView中的一个太“大”时,我得到了一个滚动条,但是只有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>

但我得到了同样的问题.. :(

3 个答案:

答案 0 :(得分:6)

听起来好像是使用TreeView的内部ScrollViewer滚动内容,而不是外部ScrollViewer

通常这是因为ScrollViewer内的内容在某种程度上受到限制,因此请确保您不以任何方式限制TreeView或其父级面板的大小。这包括将Vertical / Horizo​​nal Aligment设置为Stretch。

这是一个可以在两个方向上平滑滚动的示例。我有点惊讶于我必须在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>

答案 1 :(得分: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>

答案 2 :(得分: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和网格的可见性,并且您必须在ScrollViewer上使用Horizo​​ntalScrollBarVisibility =“Auto”!