So I'm actually a C#/Xaml dev, but I think the reason is that you're setting the reference of control to the new Image, but not updating the Visual Tree at all. You may just be changing the reference of the 'this.AlbumPictureImage' object, while the visual tree (i.e. the FrameworkElement's with the Parent/Children references) retains the old reference.
When you load the actual image into the referenced Image object in the second example, you're not changing (or attempting to change) the visual tree at all, so the control is displayed.
The way I see it, if I'm right, you have two options:
Change the visual tree itself. Remove the reference to the child in the Image Control's parent, then add the new image control in.
Set the image source of the old image control in the tree to that of the new image in the tree.
The first one is much more difficult and fraught with peril, especially if any of this is meant to be async. I'm pretty sure the Image control knows to use the dispatcher to set its image source, so the second option should be covered there. You definitely don't get that protection with the first, so you'll want to make sure to marshal to the UI thread (using the dispatcher), just in case the async thread doesn't have UI access.
The second option should also be pretty simple to implement. I absolutely apologize if this code is horrible or mangled, as I said:
AlbumPicture::AlbumPicture(Windows::UI::Xaml::Controls::Image^ Image){
InitializeComponent();
this->AlbumPictureImage->Source = Image::Source
this->Height = 200;
this->Width = 200;
this->state = AlbumPictureState::SWIPE;
this->StartingPoint = Point(0,0);
}
I don't know if the source can be the same for two controls, so you may need to detach it somehow, or grab the underlying stream and create a new ImageSource object from the stream itself.
Good coding!