2010-05-06 37 views
2

我有一個WPF網格與XAML類似這樣的控制:WPF - 網格 - 兒童更新行和列的編號屬性的新行/列的adeed除去每次

<Grid width=200 Height=200 > 

     <Grid.ColumnDefinitions >        
      <ColumnDefinition Width="1*" /> 
      <ColumnDefinition Width="2*" /> 
     </Grid.ColumnDefinitions> 

     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="Auto" MinHeight="24" /> 
     </Grid.RowDefinitions> 

     <TextBlock Text="Name" Grid.Row="0" Grid.Column="0"/> 
     <TextBox Grid.Row="0" Grid.Column="1" /> 

     <TextBlock Text="Age" Grid.Row="1" Grid.Column="0"/> 
     <TextBox Grid.Row="1" Grid.Column="1" /> 

    </Grid> 

我需要添加在現有的2行數據之間有一個新行,但是我擔心的是當我添加一個新行時,我需要手動更新每個出現在新添加行下面行的控件中的Grid.Row附加屬性。

有沒有更智能的方法來做到這一點?可能會設置相對於相鄰行/列的行/列號?

乾杯。

回答

2

您無法自動實現此目的。您必須手動調整Grid.Row的價值,爲電網的每一個孩子,需要:

foreach (UIElement child in grid.Children) 
      if (Grid.GetRow(child) >= indexOfNewRow) 
       Grid.SetRow(Grid.GetRow(child) + 1); 
+0

謝謝安迪。 基於你的代碼片斷,想知道你是否認爲我是以編程方式添加新行? 我打算在XAML上這樣做,並試圖找到是否有方法來指定相對於adjacant行/列的行和列號 – 2010-05-14 10:56:13

0

我從傑森·羅森塔爾找到答案在MSDN Silverlight Forum

如果你將鼠標懸停在網格的左側或頂部邊緣,一個微小的下拉 箭頭將與移動的選項彈出到那裏

0

接受的答案上的鏈接現在指向一個普通的Silverlight 5頁面。

您可以這樣做是Visual Studio XAML設計器,我將在下面的屏幕截圖中進行說明。這適用於WPF和Silverlight。

最好放大'設計'視圖,以便更清晰地看到。

然後,懸停在左側邊緣的鼠標光標,你會得到插入光標水平橙色線顯示在行將被插入:

XAML Design

XAML前:

插入後

XAML Before

XAML:

XAML After Insert

請注意,插入點之後的所有Grid.Row數字已自動遞增。插入點處的行自動分割爲兩個,Grid.RowSpan添加到插入點行中的項目。

在更復雜的佈局中,自動插入可能會錯誤地添加或更改插入點下方項目的邊距,因此請仔細觀察。