2014-01-12 35 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

相关问题