Линии сетки WPF отображаются неправильно - PullRequest
0 голосов
/ 05 октября 2018

Это токовый выход enter image description here

По некоторым причинам линии не располагаются между заголовками и остальными.Я проверил ширину на границе, метки и столбцы сетки, и они должны быть выровнены.Я что-то пропустил?

Это мой код

    public static void CreateGrid(Grid container, List<GridColumnItem> labels, Thickness rowMargins, int paddingTop = 65, int headerFontSize = 24)
    {
        var pos = new Point(Xpos(1, 1), Ypos(1, 1, paddingTop));
        double rowHeight = 0;
        container.Background = new SolidColorBrush(Color.FromRgb(154, 32, 39));
        container.RowDefinitions.Add(new RowDefinition());
        container.VerticalAlignment = VerticalAlignment.Top;
        container.HorizontalAlignment = HorizontalAlignment.Left;
        container.Width = partWidth(1) - pos.X - 10;
        container.Margin = new Thickness(pos.X, pos.Y, 10, 0);
        //Create columns first to get widths
        foreach (var item in labels)
        {
            for (int i = 0; i < item.columnSpan; i++)
            {
                container.ColumnDefinitions.Add(new ColumnDefinition());
                container.ColumnDefinitions[container.ColumnDefinitions.Count - 1].Width = new GridLength(item.columnWidth / item.columnSpan);
            }
        }
        var colCnt = 0;
        container.Measure(new Size(partWidth(1) - 20, partHeight(1, paddingTop)));
        //Populate Headers
        for (int i = 0; i < labels.Count; i++)
        {
            var item = labels[i];
            var newLabel = MakeDefaultTextBlock(TextAlignment.Center, headerFontSize, Brushes.Black, "");
            newLabel.Inlines.Add(new Bold(new Run(item.headerCaption)));
            newLabel.Margin = rowMargins;
            newLabel.Width = container.ColumnDefinitions[colCnt].Width.GridUnitType == GridUnitType.Pixel ? (container.ColumnDefinitions[colCnt].Width.Value * item.columnSpan) - (rowMargins.Left + rowMargins.Right) : (container.DesiredSize.Width / container.ColumnDefinitions.Count) - (rowMargins.Left + rowMargins.Right);
            //newLabel.Width = container.DesiredSize.Width / container.ColumnDefinitions.Count;
            newLabel.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
            rowHeight = Math.Max(rowHeight, newLabel.DesiredSize.Height);
            var border = new Border();
            border.HorizontalAlignment = HorizontalAlignment.Left;
            border.VerticalAlignment = VerticalAlignment.Top;
            border.Margin = new Thickness(0);
            border.Height = rowHeight + 10;
            border.Width = (int)(container.ColumnDefinitions[colCnt].Width.Value * item.columnSpan);
            border.BorderThickness = new Thickness((i == 0 ? 2 : 0), 2, 2, 0);
            border.BorderBrush = Brushes.Black;
            border.Child = newLabel;
            border.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
            Grid.SetColumn(border, colCnt);
            Grid.SetRow(border, 0);
            Grid.SetColumnSpan(border, item.columnSpan);

            container.Children.Add(border);
            colCnt++;
        }
        container.RowDefinitions[container.RowDefinitions.Count - 1].Height = new GridLength(rowHeight + 10);
        container.Height = rowHeight + 15;
    }

    public static void GridAddRow(Grid grid, List<GridCellItem> values, Thickness rowMargins, bool Lastrow = false)
    {
        var started = false;
        if (values.Count > 0)
        {
            double rowHeight = 0;
            grid.RowDefinitions.Add(new RowDefinition());
            var rowNum = grid.RowDefinitions.Count;
            foreach (var item in values)
            {
                if (item.IsntBlank())
                {
                    started = true;
                    if (item.captionText.IsntBlank())
                    {
                        var newLabel = MakeDefaultTextBlock(item.hAlign, item.captionFontSize, item.captionForeColor, item.captionText);
                        newLabel.Margin = rowMargins;
                        newLabel.Width = grid.ColumnDefinitions[item.columnNo].Width.GridUnitType == GridUnitType.Pixel ? grid.ColumnDefinitions[item.columnNo].Width.Value - (rowMargins.Left + rowMargins.Right) : (grid.DesiredSize.Width / grid.ColumnDefinitions.Count) - (rowMargins.Left + rowMargins.Right);
                        newLabel.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
                        rowHeight = Math.Max(rowHeight, newLabel.DesiredSize.Height);
                        var border = new Border();
                        border.HorizontalAlignment = HorizontalAlignment.Left;
                        border.VerticalAlignment = VerticalAlignment.Top;
                        //border.Margin = new Thickness(0);
                        border.Height = rowHeight + 10;
                        //border.Width = grid.ColumnDefinitions[item.columnNo].Width.Value;
                        border.BorderThickness = item.border;
                        border.BorderBrush = Brushes.Black;
                        border.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
                        border.Child = newLabel;

                        Grid.SetColumn(border, item.columnNo);
                        Grid.SetRow(border, grid.RowDefinitions.Count - 1);
                        if (item.rEvent.IsntBlank())
                        {
                            newLabel.MouseUp += item.rEvent;
                        }

                        newLabel.Tag = item.Tag;
                        grid.Children.Add(border);
                    }
                    else
                    {
                        var border = new Border();
                        border.HorizontalAlignment = HorizontalAlignment.Left;
                        border.VerticalAlignment = VerticalAlignment.Top;
                        border.Margin = new Thickness(0);
                        border.Height = rowHeight + 10;
                        border.Width = grid.ColumnDefinitions[item.columnNo].Width.Value;
                        border.BorderThickness = item.border;
                        border.BorderThickness = new Thickness(1);
                        border.BorderBrush = Brushes.Black;
                        Grid.SetColumn(border, item.columnNo);
                        Grid.SetRow(border, grid.RowDefinitions.Count - 1);
                        grid.Children.Add(border);
                    }
                }
                else
                {
                    var border = new Border();
                    border.HorizontalAlignment = HorizontalAlignment.Left;
                    border.VerticalAlignment = VerticalAlignment.Top;
                    border.Margin = new Thickness(0);
                    border.Height = rowHeight + 10;
                    border.Width = grid.ColumnDefinitions[item.columnNo].Width.Value;
                    border.BorderThickness = item.border;
                    border.BorderBrush = Brushes.Black;
                    Grid.SetColumn(border, item.columnNo);
                    Grid.SetRow(border, grid.RowDefinitions.Count - 1);
                    grid.Children.Add(border);

                }
            }
            grid.RowDefinitions[grid.RowDefinitions.Count - 1].Height = new GridLength(rowHeight + 10);
            grid.Height = grid.Height + rowHeight + (Lastrow ? 0 : 15);

        }
    }

И я использую этот код для выполнения

        var gridColumns = new List<GridColumnItem>() {
            new GridColumnItem("Item Type", (int)(211.0 / 1260 * (screenSize.Width - 20)), 1),
            new GridColumnItem("Description", (int)(318.0 / 1260 * (screenSize.Width - 20)), 1),
            new GridColumnItem("Account", (int)(105.0 / 1260 * (screenSize.Width - 20)), 1),
            new GridColumnItem("Qty", (int)(100.0 / 1260 * (screenSize.Width - 20)), 1),
            new GridColumnItem("Amount", (int)(207.0 / 1260 * (screenSize.Width - 20)), 1),
            new GridColumnItem("Actions", (int)(319.0 / 1260 * (screenSize.Width - 20)), 3) };

        CreateGrid(checkout.checkoutGrid, gridColumns, new Thickness(5, 5, 5, 5));
        foreach (var item in checkItems)
        {
            GridAddRow(checkout.checkoutGrid, new List<GridCellItem>()
            { new GridCellItem("Item Type", $"{item.ItemType}", 24, 0, new Thickness(2, 2, 0, 0)) { hAlign = TextAlignment.Left, captionForeColor = Brushes.Wheat },
             new GridCellItem("Description", $"{item.ItemDescription}", 24, 1, new Thickness(2, 2, 0, 0)){ hAlign = TextAlignment.Left, captionForeColor = Brushes.Wheat },
             new GridCellItem("Account", $"{item.ItemAccount}", 24, 2, new Thickness(2, 2, 0, 0)){ hAlign = TextAlignment.Left, captionForeColor = Brushes.Wheat },
             new GridCellItem("Qty", $"{item.ItemQty}", 24, 3, new Thickness(2, 2, 0, 0)) { hAlign = TextAlignment.Right, captionForeColor = Brushes.Wheat },
             new GridCellItem("Amount", $"{item.ItemAmount:c}", 24, 4, new Thickness(2, 2, 0, 0)) { hAlign = TextAlignment.Right, captionForeColor = Brushes.Wheat },
             new GridCellItem("Remove", $"Remove", 24, 5, new Thickness(2, 2, 0, 0)) { hAlign = TextAlignment.Center,  captionForeColor = Brushes.White, rEvent = removeItem_Click, Tag = item.ID },
             new GridCellItem("Query", $"Query", 24, 6, new Thickness(2, 2, 0, 0)) { hAlign = TextAlignment.Center, captionForeColor = Brushes.White, rEvent = removeItem_Click, Tag = item.ID },
             new GridCellItem("View", $"View", 24, 7, new Thickness(2, 2, 2, 0)) { hAlign = TextAlignment.Center, captionForeColor = Brushes.White, rEvent = removeItem_Click, Tag = item.ID }
            },
             new Thickness(5, 5, 5, 5)
            );
            RowCnt++;
        }
        GridAddRow(checkout.checkoutGrid, new List<GridCellItem>()
        {
            new GridCellItem("Total", 36, 3, new Thickness(2, 2, 0, 2)),
            new GridCellItem($"{checkItems.Sum(x => x.ItemAmount):c}", 36, 4, new Thickness(2, 2, 2, 2)) { hAlign = TextAlignment.Right },
            new GridCellItem(0, new Thickness(2, 2, 0, 2)),
            new GridCellItem(1, new Thickness(0, 2, 0, 2)),
            new GridCellItem(2, new Thickness(0, 2, 0, 2)),
            new GridCellItem(5, new Thickness(0, 2, 0, 2)),
            new GridCellItem(6, new Thickness(0, 2, 0, 2)),
            new GridCellItem(7, new Thickness(0, 2, 2, 2)),
        },
             new Thickness(5, 5, 5, 5), true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...