1

私はCanvas自分の WPF アプリケーションに を持っています。Rectangleオンボタンクリックを追加しています。はWidth固定ですが、Heightユーザーが に入力した値TextBox/GridCellです。

Canvasを指定して長方形を追加するとHeight。長方形を追加しますが、次々に表示されません。何か案が?

.xaml.cs:

int width=200;
Reactangle rect;
 static int val=0;
  Protected void Add()
  {
            rect = new Rectangle();
            rect.Stroke = Brushes.Red;
            rect.StrokeThickness = 1;
            rect.Height = Convert.ToInt32(txtheight.Text);
            rect.Width = width;
            Canvas.SetLeft(rect,100);
            Canvas.SetTop(rect,rect.Height);
            rect.Tag = val;
            canvasboard.Children.Add(rect);
            val=val+1;
   } 

ここに画像の説明を入力 これにより、キャンバス上に Rectangle が追加されますが、Exactly は追加されません。

<Canvas Name="canvasboard" Background="White"  Margin="2">
        </Canvas>
<TextBox Name="txtheight" Width="150"/>

注:このフォームにはWrapPanelまたはを使用できません。StackPanel既存のコードを変更したい。

助けて感謝!

4

2 に答える 2

2

追加するすべてが this に垂直に連続する要素Canvasである場合、クラススコープにも新しい変数を追加する必要なく実行できます。

private void Add() {
  rect = new Rectangle {
    Stroke = Brushes.Red,
    StrokeThickness = 1,
    Height = Convert.ToDouble(txtheight.Text),
    Width = width
  };
  Canvas.SetLeft(rect, 100);
  double canvasTop = 0.0;
  if (canvasboard.Children.Count > 0) {
    var lastChildIndex = canvasboard.Children.Count - 1;
    var lastChild = canvasboard.Children[lastChildIndex] as FrameworkElement;
    if (lastChild != null)
      canvasTop = Canvas.GetTop(lastChild) + lastChild.Height + 1;
  }
  Canvas.SetTop(rect, canvasTop);
  rect.Tag = val++;
  canvasboard.Children.Add(rect);
}
于 2013-07-12T13:07:52.217 に答える
2

すべての Rectangle を組み合わせた高さを維持するローカル変数を格納してみてください。

    private double _top = 0;

    protected void Add()
    {
        var rect = new Rectangle();
        rect.Stroke = Brushes.Red;
        rect.StrokeThickness = 1;
        rect.Height = double.Parse(txtheight.Text);
        rect.Width = 20;
        Canvas.SetLeft(rect, 100);
        Canvas.SetTop(rect, _top);
        _top += rect.Height;
        rect.Tag = val;
        canvasboard.Children.Add(rect);
        val = val + 1;
    }
于 2013-07-12T12:59:30.490 に答える