我如何渲染一个WPF网格,它有14个相等大小的列,1个列的大小是以前相等列的30%

本文关键字:1个 它有 何渲染 网格 WPF 一个 14个 | 更新日期: 2023-09-27 18:02:35

我有一个网格正在被覆盖的图像。用户将以米为单位输入图像的总长度和宽度。他们还将输入他们想要的列和行的大小。例如,图像长143米,宽216米,他们希望网格单元宽10米,高15米。所以我需要14个宽度相等的单元格其中1个单元格的宽度是前14个单元格的30%我通过循环

添加列
        numColumns = Convert.ToInt32(Math.Ceiling(143 / 10));
        numRows = Convert.ToInt32(Math.Ceiling(216 / 15));
        for(int i = 0; i < numColumns + 1; i++)
        {
            ColumnDefinition col = new ColumnDefinition();
            if(i == 0)
            {
                col.Width = new GridLength(gridHeaderOffset);
            }
            else if(i < numColumns)
            {
                col.Width = new GridLength(1,GridUnitType.Auto);
            }
            else
            {
                col.Width = new GridLength(Math.Round( (143 % 10), 2), GridUnitType.Star);
            }
            grid.ColumnDefinitions.Add(col);
        }

我如何渲染一个WPF网格,它有14个相等大小的列,1个列的大小是以前相等列的30%

问题在倒数第二行。

        public MainWindow()
        {
            InitializeComponent();
            SetupGrid(143);
        }
        private void SetupGrid(double width)
        {
            LayoutRoot.ShowGridLines = true;
            int numColumns = Convert.ToInt32(width / 10);
            double remainder = width % 10;
            //create whole columns
            for (int i = 0; i < numColumns; i++)
            {
                ColumnDefinition col = new ColumnDefinition();
                col.Width = new GridLength(10, GridUnitType.Star);
                LayoutRoot.ColumnDefinitions.Add(col);
                //adding a textblock just so show the placement
                TextBlock t = new TextBlock();
                t.HorizontalAlignment = HorizontalAlignment.Center;
                t.Text = i.ToString();
                LayoutRoot.Children.Add(t);
                Grid.SetColumn(t, i);
            }
            //create remainder
            ColumnDefinition colr = new ColumnDefinition();
            colr.Width = new GridLength(remainder, GridUnitType.Star);
            LayoutRoot.ColumnDefinitions.Add(colr);
            //adding a textblock just so show the placement
            TextBlock t2 = new TextBlock();
            t2.HorizontalAlignment = HorizontalAlignment.Center;
            t2.Text = remainder.ToString();
            LayoutRoot.Children.Add(t2);
            Grid.SetColumn(t2, numColumns + 1);
        }