Silverlight,计算形状高度和;宽度使用百分比

时间:2011-01-31 14:40:38

标签: silverlight layout canvas grid

我有一个可用的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中的滑块改变了大小。计算画布区域后,“单元格”会调整大小。

是否可以将这些值计算为百分比?

提前感谢您的帮助。

1 个答案:

答案 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%。