2011-09-28 19 views
2

我的WPF應用程序的結構內部的ScrollViewer是這樣的:使用另一張的ScrollViewer

<Scrollviewer> 
    <Grid> 
     <Scrollviewer> 
      <DataGrid> 

我的目標是,如果DataGrid超過屏幕的高度,用它自己的ScrollViewer。在這一刻,只有外部ScrollViewer被使用,所以我必須滾動整個網格。

有人可以告訴我如何做到這一點?

回答

9

您需要在內部ScrollViewer上設置一個高度,否則它會根據其內容的大小盡可能地擴展。

<Window x:Name="RootWindow"> 
    <ScrollViewer> 
     <Grid Height="{Binding ElementName=RootWindow, Path=ActualHeight}"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="*" /> 
       <RowDefinition Height="2*" /> 
      </Grid.RowDefinitions> 

      <ScrollViewer Grid.Row="1"> 
       <DataGrid /> 
      </ScrollViewer> 
     </Grid> 
    </ScrollViewer> 
</Window> 

而且,DataGrid中已經內置了它自己的滾動條,您可以使用,而不是在ScrollViewer中包裝DataGrid的屬性。這將滾動數據並始終保持標題可見,而不是滾動整個數據網格。

<DataGrid HorizontalScrollBarVisibility="Auto" 
      VerticalScrollBarVisibility="Auto" /> 
+0

但我不知道DataGrid的高度,也不知道可用的屏幕高度(分辨率等)。那麼我怎樣才能做到這一點,沒有固定的大小。 – TheJoeIaut

+0

@Joelaut看我的編輯。您可以綁定到窗口大小,或者您可以設置網格的RowDefinitions以獲取相對大小。 – Rachel

1

然後,您可能希望將DataGrid放置在滾動查看器之外。因此,您可以設置兩個Grid.Rows,並讓它爲您分配可用大小(默認值爲「相等」,或者只使用兩行,即50%-50%)。因此,如果DataGrid超出其可用大小,它將使用自己的ScrollViewer。如果下面的內容超過了大小,它將使用您手動放置的ScrollViewer。至少,這是我如何根據你的初始意見來解決它的。隨意添加代碼/評論,以便我們可以找到更好的方法。

如果您將兩個ScrollViewer加上一個數據網格放在一起,您將被迫開始傳遞具體的高度或寬度值,如果你想要這種細粒度的控制。

相關問題