internal void AddTriggerNode() { Type newClrObject = ClrNewObjectDialog.CreateNewClrObject(this.sceneViewModel, this.sceneViewModel.ProjectContext.ResolveType(ProjectNeutralTypes.BehaviorTriggerBase).RuntimeType, true); if (!(newClrObject != (Type)null)) { return; } using (SceneEditTransaction editTransaction = this.sceneViewModel.CreateEditTransaction(StringTable.AddBehaviorCommandTriggerUndo)) { BehaviorTriggerBaseNode behaviorTriggerBaseNode = (BehaviorTriggerBaseNode)this.sceneViewModel.CreateSceneNode(newClrObject); InvokeCommandActionNode commandActionNode = (InvokeCommandActionNode)this.sceneViewModel.CreateSceneNode(ProjectNeutralTypes.InvokeCommandAction); commandActionNode.CommandName = this.CategoryName; behaviorTriggerBaseNode.Actions.Add((SceneNode)commandActionNode); if (ProjectNeutralTypes.BehaviorEventTriggerBase.IsAssignableFrom((ITypeId)behaviorTriggerBaseNode.Type)) { SceneNode sceneNode = (SceneNode)this.behaviorNode; while (sceneNode != null && !(sceneNode is SceneElement)) { sceneNode = sceneNode.Parent; } if (sceneNode != null) { sceneNode.EnsureNamed(); ((BehaviorEventTriggerBaseNode)behaviorTriggerBaseNode).SourceName = sceneNode.Name; } } this.behaviorNode.GetCollectionForProperty(BehaviorHelper.BehaviorTriggersProperty).Add((SceneNode)behaviorTriggerBaseNode); editTransaction.Commit(); } this.Rebuild(); this.TriggerNodeView.MoveCurrentToLast(); }
protected override SceneNode InternalCreateInstance(ISceneInsertionPoint insertionPoint, Rect rect, OnCreateInstanceAction action) { ProjectContext projectContext = ProjectContext.GetProjectContext(insertionPoint.SceneNode.ProjectContext); if (!this.EnsureTypeReferenced(projectContext)) { return((SceneNode)null); } BehaviorHelper.EnsureSystemWindowsInteractivityReferenced((ITypeResolver)projectContext); insertionPoint.SceneNode.DesignerContext.ViewUpdateManager.RebuildPostponedViews(); SceneViewModel viewModel = insertionPoint.SceneNode.ViewModel; using (SceneEditTransaction editTransaction = viewModel.CreateEditTransaction(string.Format((IFormatProvider)CultureInfo.CurrentCulture, StringTable.UndoUnitCreateControlFormat, new object[1] { (object)this.Name }))) { viewModel.BehaviorSelectionSet.Clear(); BehaviorBaseNode selectionToSet = (BehaviorBaseNode)base.InternalCreateInstance(insertionPoint, rect, action); ISceneNodeCollection <SceneNode> collectionForProperty = selectionToSet.GetCollectionForProperty(BehaviorHelper.BehaviorTriggersProperty); foreach (IProperty property in selectionToSet.GetProperties()) { if (PlatformTypes.ICommand.IsAssignableFrom((ITypeId)property.PropertyType)) { object triggerAttribute = BehaviorHelper.CreateTriggerFromDefaultTriggerAttribute((IEnumerable)property.Attributes, insertionPoint.SceneNode.TargetType); if (triggerAttribute != null) { BehaviorTriggerBaseNode behaviorTriggerBaseNode = (BehaviorTriggerBaseNode)viewModel.CreateSceneNode(triggerAttribute); InvokeCommandActionNode commandActionNode = (InvokeCommandActionNode)viewModel.CreateSceneNode(ProjectNeutralTypes.InvokeCommandAction); commandActionNode.CommandName = property.Name; behaviorTriggerBaseNode.Actions.Add((SceneNode)commandActionNode); if (ProjectNeutralTypes.BehaviorEventTriggerBase.IsAssignableFrom((ITypeId)behaviorTriggerBaseNode.Type)) { BehaviorHelper.CreateAndSetElementNameBinding(BehaviorEventTriggerBaseNode.BehaviorSourceObjectProperty, (SceneNode)behaviorTriggerBaseNode, insertionPoint.SceneNode); } collectionForProperty.Add((SceneNode)behaviorTriggerBaseNode); } } } viewModel.BehaviorSelectionSet.SetSelection(selectionToSet); editTransaction.Commit(); return((SceneNode)selectionToSet); } }
private void Rebuild() { if (this.TriggerNodeView == null) { return; } int currentPosition = this.TriggerNodeView.CurrentPosition; this.ClearTriggerPropertiesList(); ISceneNodeCollection <SceneNode> collectionForProperty = this.behaviorNode.GetCollectionForProperty(BehaviorHelper.BehaviorTriggersProperty); foreach (SceneNode sceneNode in (IEnumerable <SceneNode>)collectionForProperty) { BehaviorTriggerBaseNode behaviorTriggerBaseNode = (BehaviorTriggerBaseNode)sceneNode; foreach (BehaviorTriggerActionNode triggerActionNode in (IEnumerable <SceneNode>)behaviorTriggerBaseNode.Actions) { InvokeCommandActionNode commandActionNode = triggerActionNode as InvokeCommandActionNode; if (commandActionNode != null && commandActionNode.IsAttached && string.Compare(commandActionNode.CommandName, this.CategoryName, StringComparison.OrdinalIgnoreCase) == 0) { PropertyReference propertyReference = new PropertyReference(new List <ReferenceStep>() { this.behaviorNode.GetPropertyForChild((SceneNode)behaviorTriggerBaseNode) as ReferenceStep, (ReferenceStep)IndexedClrPropertyReferenceStep.GetReferenceStep((ITypeResolver)sceneNode.ProjectContext, ProjectNeutralTypes.BehaviorTriggerCollection, collectionForProperty.IndexOf((SceneNode)behaviorTriggerBaseNode)) }); if (!Enumerable.Any <PropertyEntry>((IEnumerable <PropertyEntry>) this.TriggerNodes, (Func <PropertyEntry, bool>)(existingProperty => ((PropertyReferenceProperty)existingProperty).Reference.Equals((object)propertyReference)))) { this.TriggerNodes.Add((PropertyEntry)this.CreateProperty(propertyReference)); } } } } if (currentPosition >= this.TriggerNodes.Count) { return; } this.TriggerNodeView.MoveCurrentToPosition(currentPosition); }