Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / VisualBasicSettingsHandler.cs / 1305376 / VisualBasicSettingsHandler.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation { using System.ComponentModel; using Microsoft.VisualBasic.Activities; using System.Activities.Debugger; using System.Activities.Presentation.Model; using System.Runtime; using System.Linq; //the class does several things: //1. make sure a special property "Imports" (implemented using VisualBasicSettings attached properties) is added to the root object before it's loaded into ModelTree //2. make sure the "root workflow" of the root object always have the same VisualBasicSettings static class VisualBasicSettingsHandler { static public void PreviewLoadRoot(object sender, WorkflowDesigner.PreviewLoadEventArgs args) { VisualBasicSettings settings = VisualBasic.GetSettings(args.Instance); if (settings == null) { settings = new VisualBasicSettings(); VisualBasic.SetSettings(args.Instance, settings); } IDebuggableWorkflowTree root = args.Instance as IDebuggableWorkflowTree; if (root != null) { Activity rootActivity = root.GetWorkflowRoot(); if (rootActivity != null) { VisualBasic.SetSettings(rootActivity, settings); } args.Context.Services.Subscribe(manager => manager.Root.PropertyChanged += new PropertyChangedEventHandler(OnRootPropertyChanged)); } TypeDescriptor.AddProvider(new RootModelTypeDescriptionProvider(args.Instance), args.Instance); } static void OnRootPropertyChanged(object sender, PropertyChangedEventArgs e) { ModelItem rootModel = sender as ModelItem; Fx.Assert(rootModel != null, "sender item could not be null"); ModelProperty changedProperty = rootModel.Properties[e.PropertyName]; if (changedProperty == null) { return; } object changedPropertyValue = changedProperty.ComputedValue; if (changedPropertyValue == null) { return; } IDebuggableWorkflowTree root = rootModel.GetCurrentValue() as IDebuggableWorkflowTree; Fx.Assert(root != null, "root must be a IDebuggableWorkflowTree"); if (root.GetWorkflowRoot() == changedPropertyValue) { VisualBasicSettings settings = VisualBasic.GetSettings(root); VisualBasic.SetSettings(changedPropertyValue, settings); } } } class RootModelTypeDescriptionProvider : TypeDescriptionProvider { public RootModelTypeDescriptionProvider(object instance) : base(TypeDescriptor.GetProvider(instance)) { } public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { ICustomTypeDescriptor defaultDescriptor = base.GetTypeDescriptor(objectType, instance); return new RootModelTypeDescriptor(defaultDescriptor, instance); } } class RootModelTypeDescriptor : CustomTypeDescriptor { object root; NamespaceListPropertyDescriptor importDescriptor; public RootModelTypeDescriptor(ICustomTypeDescriptor parent, object root) : base(parent) { this.root = root; } PropertyDescriptor ImportDescriptor { get { if (this.importDescriptor == null) { this.importDescriptor = new NamespaceListPropertyDescriptor(this.root); } return this.importDescriptor; } } public override PropertyDescriptorCollection GetProperties() { return GetProperties(null); } public override PropertyDescriptorCollection GetProperties(Attribute[] attributes) { return new PropertyDescriptorCollection(base.GetProperties(attributes).Cast () .Union(new PropertyDescriptor[] { this.ImportDescriptor }).ToArray()); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CodeNamespaceImportCollection.cs
- DateTimeStorage.cs
- SessionSwitchEventArgs.cs
- JavaScriptObjectDeserializer.cs
- RawStylusInputCustomDataList.cs
- complextypematerializer.cs
- CompiledXpathExpr.cs
- InstanceDataCollection.cs
- TypeInfo.cs
- CaseInsensitiveComparer.cs
- DefaultParameterValueAttribute.cs
- RegexNode.cs
- GeneralTransform2DTo3D.cs
- WorkflowServiceAttributesTypeConverter.cs
- SqlParameterizer.cs
- PreservationFileWriter.cs
- DropShadowEffect.cs
- SelectorItemAutomationPeer.cs
- CompositeScriptReferenceEventArgs.cs
- Container.cs
- CharacterHit.cs
- Message.cs
- PropertyItemInternal.cs
- SemanticKeyElement.cs
- EdmItemCollection.cs
- OdbcCommandBuilder.cs
- PathData.cs
- FixedSOMTableCell.cs
- CroppedBitmap.cs
- ActivityPropertyReference.cs
- SuppressMergeCheckAttribute.cs
- RichTextBox.cs
- ButtonChrome.cs
- Executor.cs
- GridViewPageEventArgs.cs
- ScaleTransform.cs
- WriterOutput.cs
- CustomAttributeSerializer.cs
- MenuItemAutomationPeer.cs
- TableCellCollection.cs
- XmlSchemaDatatype.cs
- ParseElementCollection.cs
- TypeElementCollection.cs
- FormClosedEvent.cs
- PackageRelationshipSelector.cs
- OdbcDataAdapter.cs
- EntityDataSourceView.cs
- safemediahandle.cs
- ParameterToken.cs
- HttpWebResponse.cs
- OutOfProcStateClientManager.cs
- ApplicationSettingsBase.cs
- Span.cs
- HttpApplication.cs
- DBNull.cs
- DataQuery.cs
- OrderedEnumerableRowCollection.cs
- TerminateSequence.cs
- PassportIdentity.cs
- AnyAllSearchOperator.cs
- DetailsViewCommandEventArgs.cs
- ValuePatternIdentifiers.cs
- Mapping.cs
- TextStore.cs
- ProfilePropertyNameValidator.cs
- TTSEngineProxy.cs
- ControlBuilderAttribute.cs
- SplitterCancelEvent.cs
- ReferencedType.cs
- NavigationFailedEventArgs.cs
- Accessible.cs
- GridViewRowPresenterBase.cs
- ColorDialog.cs
- Focus.cs
- AttachedPropertiesService.cs
- EpmContentSerializerBase.cs
- Geometry3D.cs
- IsolatedStoragePermission.cs
- SimpleParser.cs
- mactripleDES.cs
- DodSequenceMerge.cs
- EndPoint.cs
- EntityDataSourceDesignerHelper.cs
- AnnotationComponentChooser.cs
- counter.cs
- WeakEventTable.cs
- TransformProviderWrapper.cs
- SoapCodeExporter.cs
- SlipBehavior.cs
- _HeaderInfo.cs
- MarkedHighlightComponent.cs
- CheckBoxBaseAdapter.cs
- Logging.cs
- WindowsGraphics.cs
- ColumnTypeConverter.cs
- Parser.cs
- RuleSettingsCollection.cs
- CodeIdentifier.cs
- WebPartZone.cs
- Operators.cs