2011-01-31 7 views
0

私は銀色のアプリケーションがありますが、固定高さと幅を使う代わりにパーセンテージを使っていくつかのアイテムのサイズを変更する必要があります。Silverlight、persentageを使って形状と高さと幅を計算する

このための私のコード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がUIのスライダによってサイズが変更されたためです。キャンバスの面積を計算した後、「セル」のサイズが変更されます。

これらの値をパーセンテージで計算することはできますか?

ご協力いただきありがとうございます。

答えて

1

グリッドを正しく使用していないようです。グリッドにアイテムを追加してから、Canvas添付プロパティを使ってアイテムを配置しようとしています。あなたは2つの異なるパネルタイプを混ぜています!キャンバス

は、子供たちはトップによって位置であり、左Grid.RowとGrid.Column添付プロパティによって示されるように、細胞内に位置しているグリッドの子供と

を調整します。

「スター」幅と高さを使用して、行/列の比例幅と高さを定義して、グリッド全体がグリッド全体の何%かを占めるようにすることができます。あなたは次の操作を行うことができ、全体のグリッドサイズの50%であるグリッドセルを追加したい場合は、マークアップの例では、:

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

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

上記では、ボタンの50%である幅を持っていますグリッド全体の幅

+0

申し訳ありませんが、私の命名規則は混乱しています。もともと私はグリッドを使っていたので、キャンバスにスウィッチされましたが、キャンバスx:の名前をグリッドにしました(グリッドを作成しますが、まだ混乱しています)。 – Shaun

+0

とにかく、私は自分のコードが作成してキャンバスに追加するセルの計算を使ってこれを修正しました。 – Shaun

関連する問題