2010-09-20 22 views
0

我有以下電網爲LayoutRoot控制在我的Silverlight頁:Silverlight的明星級網格行(MIS)的行爲就像自動調整大小排

<Grid.RowDefinitions> 
     <RowDefinition Height="30"/> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="30" /> 
    </Grid.RowDefinitions> 

第二行的全部內容是一個DataGrid填充通過數據綁定,網格的總高度很大,可能是3000像素。我的理解是,通過這種方式進行行定義,第一行和第三行應該具有相同的高度並始終保持可見(如頁眉和頁腳行),而第二行的大小應爲總高度減去60行。但實際發生的情況是,第二行佔用了全部3000像素,並未顯示垂直滾動條,並且將頁腳行拖過控件的底部。這是什麼高度=「自動」應該做的,我認爲,不是什麼高度=「*」應該做的。

我在這裏錯過了什麼?謝謝!

更新:原來,這個問題是我的網格是在其中嵌入在主頁的導航頁面,因爲我接受了默認的Silverlight項目模板。通過將所有內容放在StackPanel中,這個主頁的佈局可以擴展到內容。看起來您並不需要將Horiontal和Vertical alignment屬性設置爲Stretch。當我用網格替換StackPanel並將內部網格行高設置爲*時,它按預期工作。

回答

1

最頂端網格的默認行爲是調整大小以適應內容,除非被迫做別的。

您需要向網格本身添加VerticalAlignment =「Stretch」Horizo​​ntalAlignment =「Stretch」。這將使其適應Silverlight組件維度(例如,瀏覽器的100%)。

行和列的基本計算方法是這樣的:

  1. 減去任何固定大小的行/列
  2. 鍛鍊和減去基礎上的任何內容自動調整行/列。
  3. 鴻溝,其餘按比例*

*注:如果電網本身沒有限制高度和寬度擴大以適應內容(如汽車)。

嵌套容器的操作方式是Silverlight中最令人困惑的事情之一,但是一旦你掌握了所有的細節,它就會變得非常有意義。

+0

這似乎並不奏效。我在根對象(LayoutRoot網格,我也試着把它們放在頁面上)上設置了兩個對齊屬性,我得到了相同的結果。我在那裏放置了一個調試MessageBox來報告控件的ActualHeight,並且它報告1746,換句話說,數據網格的大小取決於內容,而不是可用空間。該死,這很令人沮喪。 – 2010-09-21 16:28:02

+0

@Joshua Frank:這類事情通常很容易解決,但需要完整的XAML,因爲許多事情與上面的代碼段有很多不同之處。如果您的代碼/ Xaml是保密的,您可以通過我的網站與我聯繫。乾杯 – 2010-09-21 18:31:38

+0

感謝您的提議。我正在仔細研究整棵樹以消除變量,如果我無法解決問題,我會聯繫您。接受答案,因爲它讓我走上正軌,因爲我可能會要求更多的幫助! – 2010-09-22 00:10:44

1

這一切都取決於承載網格的容器。如果容器沒有限制,網格的大小將佔用最大可用空間。有人必須設置限制,通常是最頂端的網格(LayoutRoot)。你只需要小心,不要在其中一個關卡上突破。

+0

我想我對此並不清楚:這個網格*是最頂端的網格,我的印象是它的大小適合容器,這是託管Silverlight的對象標記的大小控制。如果不是,你如何告訴Silverlight LayoutRoot網格應該被限制來填充容器,而不是擴展以適應它自己的內容(這可能正在發生,因爲它會解釋我得到的症狀)。 – 2010-09-20 20:40:24

相關問題