2017-09-28 1 views
1

タイトルが曖昧ではないことを願っています。私がしようとしていることは(基本的な例として)キャンバスにプログラムで矩形を追加し、後でいくつかの点でローカル変数を異なるプロパティを持つ新しい矩形に変更し、その更新をキャンバス上で行います。ローカル変数値が新しいUIElementに設定されているときに、プログラムで作成されたUIElement 'unlinks'

// First rectangle 
Rectangle rect = new Rectangle() 
{ 
    Width = 50, 
    Height = 50, 
    Fill = Brushes.Red, 
    Margin = new Thickness(20, 20, 0, 0) 
}; 

// Add it to the canvas 
mainCanvas.Children.Add(rect); 

// Change something about the rectangle, which works 
rect.Fill = Brushes.Black; 

// Create new rectangle 
Rectangle newRect = new Rectangle() 
{ 
    Width = 15, 
    Height = 20, 
    Fill = Brushes.Blue, 
    Margin = new Thickness(20, 20, 0, 0) 
}; 

// Set the original rectangle to the new rectangle 
rect = newRect; 

// Canvas rectangle is no longer 'linked' to the rect variable :(

答えて

2

rect変数を再割り当てしますが、キャンバスには影響しません。キャンバスは、古い矩形rectを指し示していただけです。 rectはちょうど長方形への参照です。キャンバスに追加すると、キャンバスはその参照をコピーします。これ以上変数を使用し続けることはありません。したがって、新しい矩形を参照するようにrectを変更すると、キャンバスは元の画像を参照するため、キャンバスは何も変更されません。

おそらく次のようなことが起こります。私はちょうどここで刺しているので、適切な方法を調べる必要があるかもしれないが、うまくいけば、これはあなたにガイダンスを与える。

mainCanvas.Children.Remove(rect); //take the old rectangle off the canvas 
rect = newRect; 
mainCanvas.Children.Add(rect); //replace the new rectangle on the canvas 
+1

それでした!それはかなりシンプルで、変数は別のクラスに格納され、メソッドを介してそのクラスに再割り当てされたので、キャンバスにアクセスすることはできませんでした。私はパラメータとしてキャンバスを渡し、あなたが提案したコードを使用しました。乾杯! – Aidan

-1

キャンバスからrectを削除し、再度新しいrectを追加する必要があります。 あなたがやっていることは、rectオブジェクトから新しいオブジェクトへのポインタです。

関連する問題