2014-01-12 53 views
3

如何以編程方式設置wpf grid rowspan?我正在使用mvvm模式。 我啓用網格線和下面的不工作:如何以編程方式設置wpf網格rowspan?

 RowDefinition row0 = new RowDefinition(); 
     myGrid.RowDefinitions.Add(row0) 

     for (int i = 1; i <= RowsCount; i++) 
     { 
      RowDefinition row = new RowDefinition(); 
      myGrid.RowDefinitions.Add(row); 
      TextBlock txt3 = new TextBlock(); 
      txt3.Text = i.ToString(); 
      txt3.FontSize = 12; 
      txt3.FontWeight = FontWeights.Bold; 
      Grid.SetRow(txt3, i); 

      myGrid.Children.Add(txt3); 
     } 

     ColumnDefinition column0 = new ColumnDefinition(); 
     myGrid.ColumnDefinitions.Add(column0); 



     char c = 'A'; 
     for (int i = 1; i <= ColumnsCount; i++) 
     { 
      ColumnDefinition column = new ColumnDefinition(); 
      myGrid.ColumnDefinitions.Add(column);     
      TextBlock txt3 = new TextBlock(); 
      txt3.Text = c.ToString(); 
      txt3.FontSize = 12; 
      txt3.FontWeight = FontWeights.Bold; 
      Grid.SetColumn(txt3, i); 
      myGrid.Children.Add(txt3); 

      switch (i) 
      { 
       case 1: 
        for (int j = 1; j <= RowsCount; j++) 
        { 
         TextBlock txt = new TextBlock(); 
         txt.Text = ColumnAROI[j-1].ToString(); 
         Grid.SetRow(txt, j); 
         Grid.SetColumn(txt, i); 
         Grid.SetRowSpan(txt, 2); 
         // Grid.SetRowSpan(txt, TubeRowSpan[j]); 
         myGrid.Children.Add(txt); 
        } 

        break; 
      } 


      c++; 
     } 

       for (int j = 1; j <= RowsCount; j++) 
        { 
         TextBlock txt = new TextBlock(); 
         txt.Text = ColumnAROI[j-1].ToString(); 
         Grid.SetRow(txt, j); 
         Grid.SetColumn(txt, i); 
         Grid.SetRowSpan(txt, TubeRowSpan[j]); 
         myGrid.Children.Add(txt); 
        } 

TubeRowSpan是int類型的ObesrvableCollection和如下文所定義。它包含除位置2(第三個元素)之外的全部1。

private ObservableCollection<int> _TubeRowSpan = new ObservableCollection<int>(); 
     public ObservableCollection<int> TubeRowSpan 
     { 
      get { return _TubeRowSpan; } 
      set 
      { 
       if (_TubeRowSpan != value) 
       { 
        _TubeRowSpan = value; 
        RaisePropertyChanged(() => TubeRowSpan); 
       } 
      } 
     } 
+0

我試過你的代碼,它工作正常 – ethicallogics

+0

@ethicallogics我編輯了我的問題 – user2330678

+0

第4行重寫第3行也許不可能顯示第3行第3行 – ethicallogics

回答

1

您必須發佈剩餘的代碼,特別是如何創建行定義。下面的代碼創建3行的每個元素,並設置行跨度爲2,它很容易從結果看,它的工作如預期:

int numChildren = 10; 
     int numRows = numChildren * 3; 
     for (int j = 0; j < numRows; j++) 
      this.myGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(30) }); 
     for (int j = 0; j < numChildren; j++) 
     { 
      TextBlock txt = new TextBlock(); 
      txt.Background = Brushes.AliceBlue; 
      txt.Text = "Row " + Convert.ToString(j); 
      Grid.SetRow(txt, j*3); 
      Grid.SetRowSpan(txt, 2); 
      myGrid.Children.Add(txt); 
     } 

我懷疑有什麼東西不對您RowDefinitions這是造成他們崩潰到0的高度使其看起來像它不工作時,實際上它是。嘗試用我的代碼替換您的整個代碼,然後將您自己的零件一點點地更換回來。

+0

爲什麼你將numChildren乘以3?這可以通過定義高度來解決嗎?無論如何,現在我已經包含了我的rowdefinitions問題。 – user2330678

+1

我將numChildren乘以3,這樣我就給每個孩子兩行(注意我也給了它們一個彩色背景),並且我將它們分開了第三行。對不起,如果這是令人困惑的,那只是爲了讓視覺更容易確認RowSpan是否正常工作。 –

+0

哦,我看到了,但我可以在我的實際代碼中做到這一點,rowspan可以跨越1和6之間的間隔。順便說一句,現在我已經完成編輯我的問題。 – user2330678

相關問題