Silverlight, рассчитать форму Высота и ширина, используя процент - PullRequest
0 голосов
/ 31 января 2011

У меня есть приложение silverlight, которое работает, но теперь мне нужно изменить размер некоторых элементов, используя процент, а не фиксированные высоты и ширины.

Мой фрагмент кода для этого:

    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 изменил размер в зависимости от ползунка в пользовательском интерфейсе.«Ячейки» изменяют размеры после расчета площади холста.

Можно ли рассчитать эти значения в процентах?

Заранее спасибо за помощь.

1 Ответ

1 голос
/ 31 января 2011

Похоже, вы не используете свою сетку правильно! Я вижу, что вы добавляете элементы в сетку, а затем пытаетесь расположить их через свойства Canvas. Вы смешиваете два разных типа панелей!

С помощью Canvas дети размещаются по верхним и левым координатам

С помощью Grid дочерние элементы располагаются в ячейках, как указано в прикрепленном свойстве Grid.Row и Grid.Column.

Вы можете использовать ширину и высоту «звезды», чтобы определить пропорциональную ширину и высоту строк / столбцов, чтобы ячейки сетки составляли некоторый процент от общей сетки. Например, в разметке, если вы хотите добавить ячейку сетки, которая составляет 50% от общего размера сетки, вы можете сделать следующее:

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
  </Grid.ColumnDefinitions

  <Button Grid.Column="1" Content="foo"/>
</Grid>

С учетом вышеизложенного, кнопка будет иметь ширину, которая составляет 50% от общей ширины сетки.

...