Question

I have a static canvas. I have added a shape runtime. Then I try to add a contentcontrol which will hold the shape. But as the the shape is already added to the canvas, it gives a logical child error. Can anyone help me how to get this done keeping the logic of adding the contentcontrol later dynamically?

XAML: Inside window tag keep a blank canvas with name="cnv"

C#:

        Ellipse ee = new Ellipse();
        ee.Width = 100;
        ee.Height= 50;
        ee.Fill= Brushes.Red;
        ee.Name = "el";
        hidden.Children.Add(ee);

        ContentControl cc = new ContentControl();
        cc.BorderBrush = Brushes.Black;
        cc.Content = ee;

        cnv.Children.Add(ee);
Was it helpful?

Solution

A UIElement can only have one parent, so you'll need to remove it from the Canvas before re-seating it elsewhere:

hidden.Children.Remove(ee);
cc.Content = ee;
cnv.Children.Add(ee);

PS. There's almost certainly a nicer, cleaner way to do whatever it is you're trying to do, rather than playing around in the visual tree like you are.

OTHER TIPS

As Kent points out an element can only have one parent, so simply remove the line:

    hidden.Children.Add(ee);

from your code as you are also calling:

    cnv.Children.Add(ee);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top