2011-06-13 42 views
1

我定義爲這樣一個滾動視框空間:Scrollviewbox是給比我更想

<ScrollViewer Width="150" Height="150" HorizontalScrollBarVisibility="Auto"> 
    <Grid Name="RootElement"> 
    </Grid> 
</ScrollViewer> 

而在代碼隱藏我填充更電網電網「rootElement的」,

void CreateGrid(uint _Columns, uint _Rows) 
    { 
    Grid layoutRoot = GetTemplateChild("RootElement") as Grid; 
    Random rand = new Random(); 

    for(int r = 0; r < _Rows; r++) 
    { 
     layoutRoot.RowDefinitions.Add(new System.Windows.Controls.RowDefinition() { Height = new GridLength(50, GridUnitType.Pixel) }); 
     for(int c = 0; c < _Columns; c++) 
     { 
      layoutRoot.ColumnDefinitions.Add(new System.Windows.Controls.ColumnDefinition() { Width = new GridLength(50, GridUnitType.Pixel) }); 

      var border = new Border(); 
      Grid.SetColumn(border, c); 
      Grid.SetRow(border, r); 

      Color col = new Color(); 
      col.A = (byte)rand.Next(255); 
      col.R = (byte)rand.Next(255); 
      col.G = (byte)rand.Next(255); 
      col.B = (byte)rand.Next(255); 
      border.Background = new SolidColorBrush(col); 
      border.BorderBrush = new SolidColorBrush(Color.FromArgb(0xff, 0x33, 0x33, 0x33)); 

      layoutRoot.Children.Add(border); 
     } 
    } 
    } 

現在我的問題是,如果我在根網格內創建10x10個網格(例如,CreateGrid(10,10)),我最終會在滾動視圖區域的右側產生一噸空白區域。隨着我創建的網格單元數量的增加,空白似乎呈指數增長。垂直方向沒問題,通常情況下完美縮放,但水平方向存在巨大差距。也許只有5%的水平空間由網格填充。

我怎樣才能讓scrollviewer只覆蓋裏面的網格空間?

回答

2

發生這種情況是因爲在內部循環中有layoutRoot.ColumnDefinitions.Add()。對於10列和10行,最終爲每1行創建10列,總計100列和10行。

分別遍歷行和列以創建列/行定義第一個。然後執行嵌套循環來創建控件。

for(int r = 0; r < _Rows; r++) { 
    layoutRoot.RowDefinitions.Add(new System.Windows.Controls.RowDefinition() { Height = new GridLength(50, GridUnitType.Pixel) }); 
} 

for(int c = 0; c < _Columns; c++) { 
    layoutRoot.ColumnDefinitions.Add(new System.Windows.Controls.ColumnDefinition() { Width = new GridLength(50, GridUnitType.Pixel) }); 
} 

for(int r = 0; r < _Rows; r++) { 
    for(int c = 0; c < _Columns; c++) { 
     var border = new Border(); 
     ... 
    } 
} 
+0

這正是我的問題,我猜想我是忽略了明顯的。謝謝你,先生! – tweetypi 2011-06-14 03:21:11