当局部变量值设置为新的UIElement时,以编程方式创建UIElement'unlinks'

时间:2017-09-28 23:55:06

标签: c# wpf

希望标题不要模糊,我不确定如何说出来。我正在尝试做的(作为一个基本示例)是以编程方式向画布添加一个矩形,然后稍后将局部变量更改为具有不同属性的新矩形,并在画布上进行更新。

// 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 :(

1 个答案:

答案 0 :(得分:2)

您正在重新分配refId变量,但这并不会影响您的Canvas。 Canvas只知道用于指向的旧矩形 for dict in container: translated += json.dumps(dict) + "," translated = translated.rstrip(',') rect只是对矩形的引用。将其添加到画布时,画布会复制引用。它不再继续使用rect变量。因此,更改rect以引用新矩形不会为画布更改任何内容,因为画布仍然引用原始矩形。

您可能希望执行以下操作。我只是在这里采取刺,所以你可能需要查找适当的方法,但希望这能为你提供指导。

rect