none
wpf 生成的按钮控制无故少了一行 RRS feed

  • 问题



  • 如图这样,循环生成的按钮控件少了中间第八行,

    调试的时候是正常的,如下面这张图



    代码是这样的:

    xaml:

    <ScrollViewer Name="SeatScrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Grid.Row="0" Grid.Column="1">
    </ScrollViewer>

    .cs

    //读出当前影院当前影厅的所有座位
                var screenSeats = _seatInfoService.GetScreenSeats(CinemaCode, ScreenCode);
                //确定座位的行数
                int rows = screenSeats.Max(s => s.YCoord);
                int minColumn = screenSeats.Min(s => s.XCoord);
                int maxColumn = screenSeats.Max(s => s.XCoord);
                //确定座位的列数
                int Columns = maxColumn - minColumn + 1;

                Grid SeatsGrid = new Grid();
                InitRows(rows, SeatsGrid);
                InitColumns(Columns, SeatsGrid);
                for (int row = 1; row <= rows; row++)
                {
                    Label l = new Label();
                    l.Content = row;
                    l.FontWeight = FontWeights.Bold;
                    l.Margin = new Thickness(5, 5, 5, 5);
                    l.Height = 30;
                    l.Width = 30;
                    l.Name = "lab_" + row;  //第八行左边的label能显示
                    l.Background = Brushes.Gainsboro;
                    RowNumStackPanel.Children.Add(l);

                    for (int column = minColumn; column <= maxColumn; column++)
                    {
                        //筛选出当前座位信息
                        var seat = screenSeats.Where(x => x.YCoord == row && x.XCoord == column).SingleOrDefault();
                        if (seat != null)
                        {
                            Button b = new Button();
                            b.Content = seat.RowNum+"*"+seat.ColumnNum; //第八行的按钮内容,看不到第八行的
                            b.Margin = new Thickness(5, 5, 5, 5);
                            b.Height = 30;
                            b.Width = 30;
                            b.Name = "btn_" + row + "_" + column; //第八行的按钮在也能在grid控件里找到
                            b.Background = Brushes.Gainsboro;
                            b.Click += new RoutedEventHandler(btnEvent_Click);

                            Grid.SetColumn(b, column);
                            Grid.SetRow(b, row);
                            SeatsGrid.Children.Add(b);
                        }
                    }
                }
                SeatScrollViewer.Content = SeatsGrid;

    wpf用的少,能否帮忙看下是什么原因

    2017年3月18日 9:01

答案

  • 感谢答复,这个问题我已经解决了

    for (int row = 0; row < rows; row++)
                {
                    if(row!=0)
                    {

                    }
    }
    我发现从第一行开始循环就是会出现这个问题,但是从0行开始就好了,看着有点累赘但是显示已经正常了,非常感谢。

    2017年3月22日 2:59

全部回复