public override void DisplayContents()
        {
            foreach (Physical part in amalgam.GetParts())
            {
                DisplayPart(part);
            }

            if (parts.Children.Count == 0)
            {
                element.Visibility = System.Windows.Visibility.Collapsed;
            }
        }
        protected virtual void DisplayBodyPart(GameObject obj, StackPanel stack)
        {
            Grid entry = GameManager.instance.GetResource <Grid>("AttachmentObjectEntry");

            if (entry == null)
            {
                throw new System.NullReferenceException("Resource 'AttachmentObjectEntry' could not be found");
            }
            stack.Children.Add(entry);

            TextBlock text = Utilities.FindNode <TextBlock>(entry, "Data1");

            if (text != null)
            {
                text.Inlines.Add(observer.Observe(obj, "name upper").span);
            }

            text = Utilities.FindNode <TextBlock>(entry, "Data2");
            if (text != null)
            {
                text.Inlines.Add(observer.Observe(obj, "weight partial").span);
            }

            text = Utilities.FindNode <TextBlock>(entry, "Data3");
            if (text != null)
            {
                text.Inlines.Add(observer.Observe(obj, "volume partial").span);
            }

            StackPanel      subData = Utilities.FindNode <StackPanel>(entry, "SubData");
            PhysicalAmalgam part    = obj as PhysicalAmalgam;

            if (part != null)
            {
                foreach (Physical child in part.GetParts())
                {
                    DisplayBodyPart(child, subData);
                }
            }

            if (subData.Children.Count == 0)
            {
                subData.Visibility = System.Windows.Visibility.Collapsed;
            }
        }