我如何渲染一个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);
}
问题在倒数第二行。
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);
}