2011-05-18 67 views
3

編輯:我重寫幾乎整個問題,因爲我意識到這個問題是不正確的和混淆。我爲此道歉,但是這個問題有錯誤的假設,導致無法回答。我最初試圖簡化它,使其更容易理解,但這使我無法複製我的問題。Silverlight 4 - ScrollViewer和子DataGrid MinHeight

如果我在一個ScrollViewer有一個MinHeight一個DataGrid,我希望隨着我的視口縮小,元素的ActualHeight將降低,直到達到MinHeight滾動條顯示出來了。

相反,它似乎在DataGrid的行累積的高度比MinHeight加起來,這個值覆蓋了minHeight

有沒有辦法做到這一點,而無需手動上漿一切,並有一噸的代碼?

例子:

<ScrollViewer VerticalScrollBarVisibility="Auto" Background="Red"> 
    <Grid x:Name="LayoutRoot" Background="Black" HorizontalAlignment="Stretch"> 
     <Grid.RowDefinitions> 
      <RowDefinition MinHeight="20"/> 
      <RowDefinition Height="80"/> 
     </Grid.RowDefinitions> 

     <sdk:DataGrid AutoGenerateColumns="True" Name="dataGrid1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" MinHeight="20" /> 
     <Rectangle Fill="Blue" Width="100" Height="80" Grid.Row="1" /> 
    </Grid> 
</ScrollViewer> 

如果你要填充該網格與某些行,如果你將窗口最大化,電網佔據了大部分的空間,並具有行後的空白。如果將其縮小,則佈局將從空白處移開,直到該空間用完,然後根級ScrollViewer開始使用,即使尚未達到MinHeight

如果用另一個矩形替換DataGrid,行爲會有所不同(顯然)。新的矩形會縮小到高度20.

如何使用網格實現此目的?我的要求是在我的SL頁面上嵌套滾動條(我發現這令人不快,但它不在我的控制範圍內)。這個想法是頂級滾動條是各種各樣的「最後的手段」。

+1

你可以發佈元素模板的XAML嗎?我猜測原因可能是內容保持高於你想要的水平。 – dain 2011-06-02 12:25:33

回答

1

您尚未提供足夠的信息來解決您的特定問題。然而,很容易證明ScrollViewer在不正是你通過蒸餾下來一樣簡單的東西渴望的時裝作品:

<UserControl ...> 
    <ScrollViewer VerticalScrollBarVisibility="Auto"> 
     <Border MinHeight="200" BorderBrush="Blue" BorderThickness="1" Background="Red"/> 
    </ScrollViewer> 
</UserControl> 

在主頁將這個在一個獨立的Silverlight應用程序,你會看到當窗口足夠小時,ScrollViewer僅顯示垂直滾動條。您可以下載解決方案here

+1

請停止在你的帖子上簽名。你的gravatar是你的簽名。 – 2011-06-04 12:59:01

+2

@ Bill:好的!親切的問候,SpeziFish。 – SpeziFish 2011-06-08 11:46:54

1

這個怎麼樣:

<ScrollViewer> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="250" /> 
    </Grid.RowDefinitions>  
    <Rectangle MinHeight="150" Background="Red" Grid.Row="0" /> 
    <Rectangle Height="250" Background="Blue" Grid.Row="1" /> 
</Grid> 

你沒有在任一矩形的設置Grid.Row值。

+0

這是一個很好的工作解決方案。我嘗試過這個。 – BitKFu 2011-06-06 11:40:15

+1

任何人想解釋爲什麼我的解決方案只是被投票? – 2011-06-08 16:37:29

+0

這不是我 - 誠實! – 2011-06-09 08:27:08

0

這是因爲ScrollViewer本身有一個邊框和填充,佔據了很小的空間。嘗試考慮一些應該與滾動條邊框空間相匹配的額外高度。

另一種選擇是更改scrollviewer的控件模板並刪除內容展示者周圍和額外的空間。並將水平滾動可見性設置爲摺疊狀態,以免佔用空間。