2011-11-29 54 views
1

這裏是我的代碼:共享相同滾動條的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級的TreeView。有相同的「區域」(意思是相同的[行,列]),所以我不得不使用面板。我用了一個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> 

,但我得到了完全相同的問題.. :(

回答

6

這聽起來像是使用TreeView的內部ScrollViewer來滾動內容,而不是外部ScrollViewer

通常這是因爲ScrollViewer內的內容在某種程度上受限於大小,所以請確保您不以任何方式限制TreeView或其父面板的大小。這將包括設置爲Stretch的Vertical/Horizo​​nal Aligment。

下面是一個可以在兩個方向上平滑滾動的示例。我有點驚訝,我必須在<ScrollViewer>標記中設置HorizontalScrollBarVisibility以使水平滾動條顯示。

<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> 
+0

我正在使用StackPanel,但事情是與StackPanel,垂直滾動條是殘酷的(不光滑)。它只給我一個2位置滾動條,可以顯示第1或第2 TreeView –

+0

@GuillaumeCogranne嘗試包裝你的DockPanel或者GridPanel的StackPanel那麼它應該給你兩全其美的:) – Rachel

+0

我想我只是嘗試了所有可能的包裝,或者我沒有任何滾動條,或者我得到了只有每個TreeView獨立水平的「越野車」滾動條:( –

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> 
+0

當我將區域縮小到一個極端點時,沒有滾動條出現與您的代碼:( 它隱藏出現錯誤的滾動條(這是一件很好的事情),我沒有任何滾動條結束:( –

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> 

對於這個工作,你必須禁用的TreeView和網格的知名度,你必須使用Horizo​​ntalScrollBarVisibility =」自動「在ScrollViewer上!