public ItemPropertiesDescriptor( ItemContent content )
        {
            myOwner = content;

            if ( content.Properties != null )
            {
                myProperties = content.Properties;
            }
            else
            {
                myProperties = new ItemPropertyCollection();
            }
        }
        internal string Save()
        {
            var container = new ItemContent();
            var innerContent = Content;

            try
            {
                Content = null;

                container.Content = innerContent;
                container.Properties = Properties;

                return XamlWriter.Save( container );
            }
            finally
            {
                container.Content = null;
                container.Properties = null;

                Content = innerContent;
            }
        }
        private void Group_Executed( object sender, ExecutedRoutedEventArgs e )
        {
            var items = from item in this.SelectionService.CurrentSelection.OfType<DesignerItem>()
                        where item.ParentID == Guid.Empty
                        select item;

            Rect rect = GetBoundingRectangle( items );

            var groupItem = new DesignerItem();
            groupItem.IsGroup = true;
            groupItem.Width = rect.Width;
            groupItem.Height = rect.Height;

            Canvas.SetLeft( groupItem, rect.Left );
            Canvas.SetTop( groupItem, rect.Top );

            var itemContent = new ItemContent();
            // TODO: copy does NOT work
            // itemContent.Properties = new ItemPropertyCollection( items.SelectMany( item => ((ItemContent)item.Content).Properties ) );
            groupItem.Content = itemContent;

            Canvas.SetZIndex( groupItem, Children.Count );

            Children.Add( groupItem );

            foreach( var item in items )
            {
                item.ParentID = groupItem.ID;
            }

            SelectionService.SelectItem( this, groupItem );
        }
        // backward compatibility code
        private void UpgradeItemContent( ItemContent content )
        {
            if( content.Properties.Any( p => p.ElementName == "ClassName" ) )
            {
                ( ( Border )content.Content ).Name = "Body";
                content.Properties.Add( new ItemProperty { ElementName = "Body", ElementProperty = "Background", DisplayName = "Fill", IsComponentName = false } );

                return;
            }

            if( content.Properties.Any( p => p.ElementName == "ObjectName" ) )
            {
                ( ( Border )content.Content ).Name = "Body";
                content.Properties.Add( new ItemProperty { ElementName = "Body", ElementProperty = "Background", DisplayName = "Fill", IsComponentName = false } );

                return;
            }

            if( content.Properties.Any( p => p.ElementName == "Question" ) )
            {
                var grid = ( Grid )content.Content;
                var path = grid.Children.OfType<System.Windows.Shapes.Path>().Single();
                path.Name = "Body";

                content.Properties.Add( new ItemProperty { ElementName = "Body", ElementProperty = "Fill", DisplayName = "Fill", IsComponentName = false } );

                return;
            }
        }
 public static ItemContentTemplate Create( ItemContent template )
 {
     var blob = template.Save();
     return new ItemContentTemplate( blob );
 }