2016-08-16 3 views
0

У меня есть сетка, накладываемая на изображение. Пользователь будет вводить общую длину и ширину изображения в метрах. Они также будут вводить размер столбцов и строк, которые они хотят. Например, изображение имеет ширину 143 метра и ширину 216 метров, и они хотят, чтобы ячейки сетки были 10 метров в ширину и 15 метров в высоту. Поэтому мне нужно было 14 одинаковых ячеек шириной и 1 ячейку, которая составляет 30% ширины предыдущего 14. Я добавляю столбцы через петлюКак я могу визуализировать WPF-сетку, которая имеет 14 столбцов равного размера и 1 столбец 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); 
     } 

ответ

0

Проблема заключается в том, где некоторые во 2-й последней строке.

0
 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); 
     }