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))); }
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))); }
/// <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(); } }