【问题标题】:How can I render a WPF Grid that has 14 equal sized columns and 1 column 30% the size of the previous equal columns如何呈现具有 14 个相等大小的列和 1 个大小为先前相等列大小的 30% 的 WPF 网格
【发布时间】:2016-08-17 03:14:36
【问题描述】:

我有一个网格正在覆盖图像。用户将输入以米为单位的总图像长度和宽度。他们还将输入他们想要的列和行的大小。 例如,图像长 143 米,宽 216 米,他们希望网格单元为 10 米宽 x 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);
        }

【问题讨论】:

    标签: c# wpf grid-layout


    【解决方案1】:

    问题出在倒数第二行的某个地方。

    【讨论】:

      【解决方案2】:
              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);
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-02
        • 1970-01-01
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 2011-11-15
        相关资源
        最近更新 更多