Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / Markup / Primitives / FrameworkElementFactoryMarkupObject.cs / 1 / FrameworkElementFactoryMarkupObject.cs
//------------------------------------------------------------------------ // // Microsoft Windows Client Platform // Copyright (c) Microsoft Corporation. All rights reserved. // // File: FactoryElementFactoryMarkupObject.cs // // Contents: MarkupObject and MarkupProperty implementations for // FrameworkElementFactory // // Created: 04/28/2005 [....] // //----------------------------------------------------------------------- using System; using System.ComponentModel; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Windows; using System.Windows.Markup; using MS.Utility; namespace System.Windows.Markup.Primitives { ////// Item implementation for FrameworkElementFactory /// internal class FrameworkElementFactoryMarkupObject : MarkupObject { internal FrameworkElementFactoryMarkupObject(FrameworkElementFactory factory, XamlDesignerSerializationManager manager) { Debug.Assert(factory != null); _factory = factory; _manager = manager; } public override void AssignRootContext(IValueSerializerContext context) { _context = context; } public override System.ComponentModel.AttributeCollection Attributes { get { return TypeDescriptor.GetAttributes(ObjectType); } } public override Type ObjectType { get { if (_factory.Type != null) return _factory.Type; else return typeof(string); } } public override object Instance { get { return _factory; } } internal override IEnumerableGetProperties(bool mapToConstructorArgs) { // This #if is included to make this implementation easier to test outside the assembly. // This is the only place in ElementItem and FrameworkElementItem where internal members // are accessed that cannot be easily copied by the host. if (_factory.Type == null) { if (_factory.Text != null) { yield return new FrameworkElementFactoryStringContent(_factory, this); } } else { FrugalStructList propertyValues = _factory.PropertyValues; for (int i = 0; i < propertyValues.Count; i++) { if (propertyValues[i].Property != XmlAttributeProperties.XmlnsDictionaryProperty) { yield return new FrameworkElementFactoryProperty(propertyValues[i], this); } } ElementMarkupObject item = new ElementMarkupObject(_factory, Manager); foreach (MarkupProperty property in item.Properties) { if (property.Name == "Triggers" && property.Name == "Storyboard") { yield return property; } } if (_factory.FirstChild != null) { if (_factory.FirstChild.Type == null) { yield return new FrameworkElementFactoryStringContent(_factory.FirstChild, this); } else { yield return new FrameworkElementFactoryContent(_factory, this); } } } } internal IValueSerializerContext Context { get { return _context; } } internal XamlDesignerSerializationManager Manager { get { return _manager; } } private FrameworkElementFactory _factory; private IValueSerializerContext _context; private XamlDesignerSerializationManager _manager; } /// /// FrameworkElementFactory implementation of MarkupProperty using PropertyValue. /// internal class FrameworkElementFactoryProperty : ElementPropertyBase { public FrameworkElementFactoryProperty(PropertyValue propertyValue, FrameworkElementFactoryMarkupObject item): base(item.Manager) { _propertyValue = propertyValue; _item = item; } public override PropertyDescriptor PropertyDescriptor { get { if (!_descriptorCalculated) { _descriptorCalculated = true; if (DependencyProperty.FromName(_propertyValue.Property.Name, _item.ObjectType) == _propertyValue.Property) { _descriptor = DependencyPropertyDescriptor.FromProperty(_propertyValue.Property, _item.ObjectType); } } return _descriptor; } } public override bool IsAttached { get { DependencyPropertyDescriptor pdp = PropertyDescriptor as DependencyPropertyDescriptor; return (pdp != null) && pdp.IsAttached; } } public override AttributeCollection Attributes { get { if (_descriptor != null) { return _descriptor.Attributes; } else { PropertyDescriptor descriptor = DependencyPropertyDescriptor.FromProperty(_propertyValue.Property, _item.ObjectType); return descriptor.Attributes; } } } public override string Name { get { return _propertyValue.Property.Name; } } public override Type PropertyType { get { return _propertyValue.Property.PropertyType; } } public override DependencyProperty DependencyProperty { get { return _propertyValue.Property; } } public override object Value { get { switch (_propertyValue.ValueType) { case PropertyValueType.Set: case PropertyValueType.TemplateBinding: return _propertyValue.Value; case PropertyValueType.Resource: return new DynamicResourceExtension(_propertyValue.Value); default: Debug.Fail("Unexpected property value type"); return null; } } } protected override IValueSerializerContext GetItemContext() { return _item.Context; } protected override Type GetObjectType() { return _item.ObjectType; } private PropertyValue _propertyValue; private FrameworkElementFactoryMarkupObject _item; private bool _descriptorCalculated; private PropertyDescriptor _descriptor; } ////// Special content property for content because FrameworkElementFactory hard codes /// to call IAddChild and doesn't need to know the name of the collection it is /// adding to. /// internal class FrameworkElementFactoryContent : ElementPropertyBase { internal FrameworkElementFactoryContent(FrameworkElementFactory factory, FrameworkElementFactoryMarkupObject item): base(item.Manager) { _item = item; _factory = factory; } public override string Name { get { return "Content"; } } public override bool IsContent { get { return true; } } public override bool IsComposite { get { return true; } } public override IEnumerableItems { get { FrameworkElementFactory child = _factory.FirstChild; while (child != null) { yield return new FrameworkElementFactoryMarkupObject(child, Manager); child = child.NextSibling; } } } protected override IValueSerializerContext GetItemContext() { return _item.Context; } protected override Type GetObjectType() { return _item.ObjectType; } public override AttributeCollection Attributes { get { return new AttributeCollection(); } } public override Type PropertyType { get { return typeof(IEnumerable); } } public override object Value { get { return _factory; } } FrameworkElementFactoryMarkupObject _item; FrameworkElementFactory _factory; } /// /// Special content property for string values in a framework element factory. /// internal class FrameworkElementFactoryStringContent : ElementPropertyBase { internal FrameworkElementFactoryStringContent(FrameworkElementFactory factory, FrameworkElementFactoryMarkupObject item) : base(item.Manager) { _item = item; _factory = factory; } public override string Name { get { return "Content"; } } public override bool IsContent { get { return true; } } public override bool IsComposite { get { return false; } } public override bool IsValueAsString { get { return true; } } public override IEnumerableItems { get { return new MarkupObject[0]; } } protected override IValueSerializerContext GetItemContext() { return _item.Context; } protected override Type GetObjectType() { return _item.ObjectType; } public override AttributeCollection Attributes { get { return new AttributeCollection(); } } public override Type PropertyType { get { return typeof(string); } } public override object Value { get { return _factory.Text; } } FrameworkElementFactoryMarkupObject _item; FrameworkElementFactory _factory; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------ // // Microsoft Windows Client Platform // Copyright (c) Microsoft Corporation. All rights reserved. // // File: FactoryElementFactoryMarkupObject.cs // // Contents: MarkupObject and MarkupProperty implementations for // FrameworkElementFactory // // Created: 04/28/2005 [....] // //----------------------------------------------------------------------- using System; using System.ComponentModel; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Windows; using System.Windows.Markup; using MS.Utility; namespace System.Windows.Markup.Primitives { /// /// Item implementation for FrameworkElementFactory /// internal class FrameworkElementFactoryMarkupObject : MarkupObject { internal FrameworkElementFactoryMarkupObject(FrameworkElementFactory factory, XamlDesignerSerializationManager manager) { Debug.Assert(factory != null); _factory = factory; _manager = manager; } public override void AssignRootContext(IValueSerializerContext context) { _context = context; } public override System.ComponentModel.AttributeCollection Attributes { get { return TypeDescriptor.GetAttributes(ObjectType); } } public override Type ObjectType { get { if (_factory.Type != null) return _factory.Type; else return typeof(string); } } public override object Instance { get { return _factory; } } internal override IEnumerableGetProperties(bool mapToConstructorArgs) { // This #if is included to make this implementation easier to test outside the assembly. // This is the only place in ElementItem and FrameworkElementItem where internal members // are accessed that cannot be easily copied by the host. if (_factory.Type == null) { if (_factory.Text != null) { yield return new FrameworkElementFactoryStringContent(_factory, this); } } else { FrugalStructList propertyValues = _factory.PropertyValues; for (int i = 0; i < propertyValues.Count; i++) { if (propertyValues[i].Property != XmlAttributeProperties.XmlnsDictionaryProperty) { yield return new FrameworkElementFactoryProperty(propertyValues[i], this); } } ElementMarkupObject item = new ElementMarkupObject(_factory, Manager); foreach (MarkupProperty property in item.Properties) { if (property.Name == "Triggers" && property.Name == "Storyboard") { yield return property; } } if (_factory.FirstChild != null) { if (_factory.FirstChild.Type == null) { yield return new FrameworkElementFactoryStringContent(_factory.FirstChild, this); } else { yield return new FrameworkElementFactoryContent(_factory, this); } } } } internal IValueSerializerContext Context { get { return _context; } } internal XamlDesignerSerializationManager Manager { get { return _manager; } } private FrameworkElementFactory _factory; private IValueSerializerContext _context; private XamlDesignerSerializationManager _manager; } /// /// FrameworkElementFactory implementation of MarkupProperty using PropertyValue. /// internal class FrameworkElementFactoryProperty : ElementPropertyBase { public FrameworkElementFactoryProperty(PropertyValue propertyValue, FrameworkElementFactoryMarkupObject item): base(item.Manager) { _propertyValue = propertyValue; _item = item; } public override PropertyDescriptor PropertyDescriptor { get { if (!_descriptorCalculated) { _descriptorCalculated = true; if (DependencyProperty.FromName(_propertyValue.Property.Name, _item.ObjectType) == _propertyValue.Property) { _descriptor = DependencyPropertyDescriptor.FromProperty(_propertyValue.Property, _item.ObjectType); } } return _descriptor; } } public override bool IsAttached { get { DependencyPropertyDescriptor pdp = PropertyDescriptor as DependencyPropertyDescriptor; return (pdp != null) && pdp.IsAttached; } } public override AttributeCollection Attributes { get { if (_descriptor != null) { return _descriptor.Attributes; } else { PropertyDescriptor descriptor = DependencyPropertyDescriptor.FromProperty(_propertyValue.Property, _item.ObjectType); return descriptor.Attributes; } } } public override string Name { get { return _propertyValue.Property.Name; } } public override Type PropertyType { get { return _propertyValue.Property.PropertyType; } } public override DependencyProperty DependencyProperty { get { return _propertyValue.Property; } } public override object Value { get { switch (_propertyValue.ValueType) { case PropertyValueType.Set: case PropertyValueType.TemplateBinding: return _propertyValue.Value; case PropertyValueType.Resource: return new DynamicResourceExtension(_propertyValue.Value); default: Debug.Fail("Unexpected property value type"); return null; } } } protected override IValueSerializerContext GetItemContext() { return _item.Context; } protected override Type GetObjectType() { return _item.ObjectType; } private PropertyValue _propertyValue; private FrameworkElementFactoryMarkupObject _item; private bool _descriptorCalculated; private PropertyDescriptor _descriptor; } ////// Special content property for content because FrameworkElementFactory hard codes /// to call IAddChild and doesn't need to know the name of the collection it is /// adding to. /// internal class FrameworkElementFactoryContent : ElementPropertyBase { internal FrameworkElementFactoryContent(FrameworkElementFactory factory, FrameworkElementFactoryMarkupObject item): base(item.Manager) { _item = item; _factory = factory; } public override string Name { get { return "Content"; } } public override bool IsContent { get { return true; } } public override bool IsComposite { get { return true; } } public override IEnumerableItems { get { FrameworkElementFactory child = _factory.FirstChild; while (child != null) { yield return new FrameworkElementFactoryMarkupObject(child, Manager); child = child.NextSibling; } } } protected override IValueSerializerContext GetItemContext() { return _item.Context; } protected override Type GetObjectType() { return _item.ObjectType; } public override AttributeCollection Attributes { get { return new AttributeCollection(); } } public override Type PropertyType { get { return typeof(IEnumerable); } } public override object Value { get { return _factory; } } FrameworkElementFactoryMarkupObject _item; FrameworkElementFactory _factory; } /// /// Special content property for string values in a framework element factory. /// internal class FrameworkElementFactoryStringContent : ElementPropertyBase { internal FrameworkElementFactoryStringContent(FrameworkElementFactory factory, FrameworkElementFactoryMarkupObject item) : base(item.Manager) { _item = item; _factory = factory; } public override string Name { get { return "Content"; } } public override bool IsContent { get { return true; } } public override bool IsComposite { get { return false; } } public override bool IsValueAsString { get { return true; } } public override IEnumerableItems { get { return new MarkupObject[0]; } } protected override IValueSerializerContext GetItemContext() { return _item.Context; } protected override Type GetObjectType() { return _item.ObjectType; } public override AttributeCollection Attributes { get { return new AttributeCollection(); } } public override Type PropertyType { get { return typeof(string); } } public override object Value { get { return _factory.Text; } } FrameworkElementFactoryMarkupObject _item; FrameworkElementFactory _factory; } } // 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
- ListSortDescriptionCollection.cs
- Metafile.cs
- Setter.cs
- SiteMapProvider.cs
- TimeSpanOrInfiniteConverter.cs
- Point3D.cs
- XmlTextReaderImplHelpers.cs
- SoapElementAttribute.cs
- GetLedgerRequest.cs
- ConfigXmlDocument.cs
- DSASignatureDeformatter.cs
- WindowsAltTab.cs
- safelink.cs
- TransformedBitmap.cs
- DescendantOverDescendantQuery.cs
- WebException.cs
- VisualTreeUtils.cs
- Transactions.cs
- XsdBuilder.cs
- PageClientProxyGenerator.cs
- ParagraphVisual.cs
- HandledEventArgs.cs
- MemberDomainMap.cs
- UnmanagedMemoryStream.cs
- AppDomainProtocolHandler.cs
- SystemWebSectionGroup.cs
- NumericPagerField.cs
- PackagePart.cs
- GestureRecognizer.cs
- NotConverter.cs
- QueueProcessor.cs
- OdbcUtils.cs
- HandlerMappingMemo.cs
- CaseStatement.cs
- CustomAssemblyResolver.cs
- ResXFileRef.cs
- WebPartAuthorizationEventArgs.cs
- RelationshipEnd.cs
- XmlSchemaAll.cs
- ObjectStorage.cs
- RegistryExceptionHelper.cs
- RuntimeArgumentHandle.cs
- XPathNode.cs
- AxHostDesigner.cs
- ListViewGroup.cs
- ChannelDemuxer.cs
- BrowserDefinitionCollection.cs
- PlatformNotSupportedException.cs
- WindowsSidIdentity.cs
- SqlXml.cs
- ReadOnlyDataSource.cs
- OptimizedTemplateContentHelper.cs
- printdlgexmarshaler.cs
- storepermissionattribute.cs
- LinqDataSourceStatusEventArgs.cs
- HttpClientChannel.cs
- TextServicesDisplayAttributePropertyRanges.cs
- SQLInt16.cs
- SizeChangedInfo.cs
- SR.cs
- AccessViolationException.cs
- ObjectQuery_EntitySqlExtensions.cs
- XmlWriterTraceListener.cs
- LinkedDataMemberFieldEditor.cs
- UserUseLicenseDictionaryLoader.cs
- TimeIntervalCollection.cs
- SortKey.cs
- DNS.cs
- CreateUserWizardStep.cs
- TextOnlyOutput.cs
- RenamedEventArgs.cs
- MergablePropertyAttribute.cs
- CLSCompliantAttribute.cs
- RotateTransform3D.cs
- ModelPerspective.cs
- WaitForChangedResult.cs
- ThreadExceptionDialog.cs
- SoapAttributeOverrides.cs
- WinFormsUtils.cs
- Page.cs
- UriTemplateEquivalenceComparer.cs
- CurrentChangingEventManager.cs
- XmlAttributeOverrides.cs
- ClientOptions.cs
- PublisherIdentityPermission.cs
- metadatamappinghashervisitor.cs
- SimpleFileLog.cs
- ColorPalette.cs
- ProtocolsConfigurationHandler.cs
- ReadOnlyDictionary.cs
- XsltContext.cs
- TypedAsyncResult.cs
- ChannelBinding.cs
- ActivatableWorkflowsQueryResult.cs
- LayoutExceptionEventArgs.cs
- CroppedBitmap.cs
- CrossSiteScriptingValidation.cs
- HMACSHA256.cs
- ConfigurationSectionGroup.cs
- HttpValueCollection.cs