2010-09-20 117 views
1

我有一個5行的網格。在第2和第4行,我有一個DataGrid。其他行具有固定的高度。 DataGrids中表格的內容當然是動態確定的,因此也是它們的高度。在我的特定應用中,兩個表格的高度之間存在關係,我想在運行時調整兩者的MaxHeight。如果一個表比最初使用的MaxHeight長,它應該得到一個ScrollBar。但是這兩個表的高度不應該比瀏覽器的頁面長。Silverlight在運行時調整DataGrid高度

現在我試圖在一些事件觸發運行時要做到這一點:

 if (availableSpace - heightOfTable1 - heightOfTable2 < 0) 
     { 
      if (heightOfTable1 > heightOfTable2) 
      { 
       Table1.MaxHeight = availableSpace - heightOfTable2; 
       // Trigger a rerendering 
       Table1.ItemsSource = null; 
       Table1.ItemsSource = List1; 
       ... 

      } 
      ... 
     } 

但是我注意到,當我這樣做的ActualHeight沒有改變。 ActualHeight現在比運行時指定的MaxHeight大 我做錯了什麼?

回答

0

還要將數據網格高度屬性設置爲MaxHeight(如果它們超出了它們當前的MaxHeight)。如果MaxHeight已經超過MaxHeight,它將不會重新檢查。

你不應該需要觸發重新渲染......你有沒有考慮在代碼中改變網格行的行高和最大行高而不是datagrids?當我操縱行高時,事情似乎運行得更順暢,而不是內容高度。在你的例子中,這也是有道理的,因爲你基本上是要在計算的基礎上分配剩餘的行高(第2行& 4)。更改數據網格大小似乎是錯誤的。

只要用x:Name =「Row2」等名稱來表示單個行,就像其他任何元素一樣。我實際上使用網格行高度的數據綁定來計算雙重屬性(因爲我使用MVVM),但代碼隱藏似乎是您的示例的地方。