Ejemplo n.º 1
0
        public virtual bool CanEnterContainer(PlacementOperation operation)
        {
            if (ExtendedItem.ContentProperty.IsCollection)
            {
                return(CollectionSupport.CanCollectionAdd(ExtendedItem.ContentProperty.ReturnType,
                                                          operation.PlacedItems.Select(p => p.Item.Component)));
            }
            if (ExtendedItem.View is ContentControl)
            {
                if (!CanContentControlAdd((ContentControl)ExtendedItem.View))
                {
                    return(false);
                }
            }

            if (!ExtendedItem.ContentProperty.IsSet)
            {
                return(true);
            }

            object value = ExtendedItem.ContentProperty.ValueOnInstance;

            // don't overwrite non-primitive values like bindings
            return(ExtendedItem.ContentProperty.Value == null && (value is string && string.IsNullOrEmpty(value as string)));
        }
Ejemplo n.º 2
0
        private bool internalCanEnterContainer(PlacementOperation operation)
        {
            InfoTextEnterArea.Stop(ref infoTextEnterArea);

            if (ExtendedItem.Component is Expander)
            {
                if (!((Expander)ExtendedItem.Component).IsExpanded)
                {
                    ((Expander)ExtendedItem.Component).IsExpanded = true;
                }
            }

            if (ExtendedItem.Component is UserControl && ExtendedItem.ComponentType != typeof(UserControl))
            {
                return(false);
            }

            if (ExtendedItem.Component is Decorator)
            {
                return(((Decorator)ExtendedItem.Component).Child == null);
            }

            if (ExtendedItem.ContentProperty.IsCollection)
            {
                return(CollectionSupport.CanCollectionAdd(ExtendedItem.ContentProperty.ReturnType,
                                                          operation.PlacedItems.Select(p => p.Item.Component)));
            }
            if (ExtendedItem.View is ContentControl)
            {
                if (!CanContentControlAdd((ContentControl)ExtendedItem.View))
                {
                    return(false);
                }
            }

            if (ExtendedItem.ContentProperty.ReturnType == typeof(string))
            {
                return(false);
            }

            if (!ExtendedItem.ContentProperty.IsSet)
            {
                return(true);
            }

            object value = ExtendedItem.ContentProperty.ValueOnInstance;

            // don't overwrite non-primitive values like bindings
            return(ExtendedItem.ContentProperty.Value == null && (value is string && string.IsNullOrEmpty(value as string)));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Paste items from clipboard into the designer.
        /// </summary>
        public void Paste()
        {
            bool   pasted              = false;
            string combinedXaml        = Clipboard.GetText(TextDataFormat.Xaml);
            IEnumerable <string> xamls = combinedXaml.Split(_delimeter);

            xamls = xamls.Where(xaml => xaml != "");

            DesignItem parent = _context.Services.Selection.PrimarySelection;
            DesignItem child  = _context.Services.Selection.PrimarySelection;

            XamlDesignItem rootItem    = _context.RootItem as XamlDesignItem;
            var            pastedItems = new Collection <DesignItem>();

            foreach (var xaml in xamls)
            {
                var obj = XamlParser.ParseSnippet(rootItem.XamlObject, xaml, _settings);
                if (obj != null)
                {
                    DesignItem item = _context._componentService.RegisterXamlComponentRecursive(obj);
                    if (item != null)
                    {
                        pastedItems.Add(item);
                    }
                }
            }

            if (pastedItems.Count != 0)
            {
                var changeGroup = _context.OpenGroup("Paste " + pastedItems.Count + " elements", pastedItems);
                while (parent != null && pasted == false)
                {
                    if (parent.ContentProperty != null)
                    {
                        if (parent.ContentProperty.IsCollection)
                        {
                            if (CollectionSupport.CanCollectionAdd(parent.ContentProperty.ReturnType, pastedItems.Select(item => item.Component)) && parent.GetBehavior <IPlacementBehavior>() != null)
                            {
                                AddInParent(parent, pastedItems);
                                pasted = true;
                            }
                        }
                        else if (pastedItems.Count == 1 && parent.ContentProperty.Value == null && parent.ContentProperty.ValueOnInstance == null && parent.View is ContentControl)
                        {
                            AddInParent(parent, pastedItems);
                            pasted = true;
                        }
                        if (!pasted)
                        {
                            parent = parent.Parent;
                        }
                    }
                    else
                    {
                        parent = parent.Parent;
                    }
                }

                while (pasted == false)
                {
                    if (child.ContentProperty != null)
                    {
                        if (child.ContentProperty.IsCollection)
                        {
                            foreach (var col in child.ContentProperty.CollectionElements)
                            {
                                if (col.ContentProperty != null && col.ContentProperty.IsCollection)
                                {
                                    if (CollectionSupport.CanCollectionAdd(col.ContentProperty.ReturnType, pastedItems.Select(item => item.Component)))
                                    {
                                        pasted = true;
                                    }
                                }
                            }
                            break;
                        }
                        else if (child.ContentProperty.Value != null)
                        {
                            child = child.ContentProperty.Value;
                        }
                        else if (pastedItems.Count == 1)
                        {
                            child.ContentProperty.SetValue(pastedItems.First().Component);
                            pasted = true;
                            break;
                        }
                        else
                        {
                            break;
                        }
                    }
                    else
                    {
                        break;
                    }
                }

                foreach (var pastedItem in pastedItems)
                {
                    _context._componentService.RaiseComponentRegisteredAndAddedToContainer(pastedItem);
                }


                changeGroup.Commit();
            }
        }