我有一个可用的silverlight应用程序,但我现在需要使用百分比调整某些项目的大小,而不是使用固定的高度和宽度。
我的代码snippit是:
private void drawCell(int row, int col, string label, Color fill)
{
Rectangle rect = new Rectangle();
rect.Height = cellSize;
rect.Width = cellSize;
rect.StrokeThickness = 2;
rect.Stroke = new SolidColorBrush(Colors.DarkGray);
rect.Fill = new SolidColorBrush(fill);
Grid.Children.Add(rect);
Canvas.SetLeft(rect, col * cellSize);
Canvas.SetTop(rect, row * cellSize);
Rectangle innertec = new Rectangle();
innertec.Height = cellSize - 30;
innertec.Width = cellSize - 10;
innertec.StrokeThickness = 1;
innertec.Stroke = new SolidColorBrush(Colors.Black);
innertec.Fill = new SolidColorBrush(fill);
innertec.Margin = new Thickness(5);
Grid.Children.Add(innertec);
Canvas.SetLeft(innertec, col * cellSize);
Canvas.SetTop(innertec, row * cellSize);
Border productLabelBorder = new Border();
TextBlock productLabel = new TextBlock();
productLabel.Height = cellSize - 60;
productLabel.Width = cellSize - 10;
productLabel.Margin = new Thickness(5, innertec.Height + 5, 0, 5);
productLabel.TextAlignment = TextAlignment.Center;
productLabel.TextWrapping = TextWrapping.NoWrap;
productLabel.TextTrimming = TextTrimming.WordEllipsis;
productLabel.Text = label;
ToolTipService.SetToolTip(productLabel, label);
productLabelBorder.Child = productLabel;
Grid.Children.Add(productLabelBorder);
Canvas.SetLeft(productLabelBorder, col * cellSize);
Canvas.SetTop(productLabelBorder, row * cellSize);
}
我希望代码执行的是获取innertec和productLabel,并通过首先查看cellSize(其他地方设置的变量)来计算高度和宽度,然后使用百分比的cellSize创建这些对象。
原因是cellSize根据UI中的滑块改变了大小。计算画布区域后,“单元格”会调整大小。
是否可以将这些值计算为百分比?
提前感谢您的帮助。
答案 0 :(得分:1)
看起来你没有正确使用你的网格!我可以看到你正在向Grid添加项目,然后尝试通过Canvas附加属性定位它们。您正在混合两种不同的面板类型!
使用画布,子项是按其顶部和左侧坐标的位置
使用Grid,子项位于单元格内,如Grid.Row和Grid.Column附加属性所示。
您可以使用“星形”宽度和高度来定义行/列的比例宽度和高度,以便网格单元格占整个网格的一定百分比。例如,在标记中,如果要添加占网格总大小50%的网格单元,则可以执行以下操作:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions
<Button Grid.Column="1" Content="foo"/>
</Grid>
如上所述,Button的宽度为整个网格宽度的50%。