如何以编程方式设置wpf grid rowspan?

时间:2014-01-12 02:55:07

标签: c# .net wpf silverlight mvvm

如何以编程方式设置wpf网格行数?我正在使用mvvm模式。 我启用了网格线,但下面不起作用:

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类型的ObservableCollection,定义如下。除了位置2(第3个元素)之外,它包含所有1个。

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

1 个答案:

答案 0 :(得分:1)

您必须发布其余代码,特别是如何创建行定义。以下代码为每个元素创建3行,并将rowspan设置为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的高度使它看起来就像它实际上它没有工作一样。尝试用我的代码替换你的整个代码,然后一点一点地替换你自己的部分。