Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Markup / Baml2006 / WpfKnownMemberInvoker.cs / 1305600 / WpfKnownMemberInvoker.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Xaml.Schema;
using System.Reflection;
namespace System.Windows.Baml2006
{
class WpfKnownMemberInvoker : XamlMemberInvoker
{
WpfKnownMember _member;
bool _hasShouldSerializeMethodBeenLookedup = false;
MethodInfo _shouldSerializeMethod = null;
public WpfKnownMemberInvoker(WpfKnownMember member) : base(member)
{
_member = member;
}
public override object GetValue(object instance)
{
if (_member.DependencyProperty != null)
{
return ((DependencyObject)instance).GetValue(_member.DependencyProperty);
}
else
{
return _member.GetDelegate(instance);
}
}
public override void SetValue(object instance, object value)
{
if (_member.DependencyProperty != null)
{
((DependencyObject)instance).SetValue(_member.DependencyProperty, value);
}
else
{
_member.SetDelegate(instance, value);
}
}
public override ShouldSerializeResult ShouldSerializeValue(object instance)
{
// Look up the ShouldSerializeMethod
if (!_hasShouldSerializeMethodBeenLookedup)
{
Type declaringType = _member.UnderlyingMember.DeclaringType;
string methodName = "ShouldSerialize" + _member.Name;
BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static;
Type[] args = new Type[] { typeof(DependencyObject) }; ;
if (_member.IsAttachable)
{
_shouldSerializeMethod = declaringType.GetMethod(methodName, flags, null, args, null);
}
else
{
flags |= BindingFlags.Instance;
_shouldSerializeMethod = declaringType.GetMethod(methodName, flags, null, args, null);
}
_hasShouldSerializeMethodBeenLookedup = true;
}
// Invoke the method if we found one
if (_shouldSerializeMethod != null)
{
bool result;
var args = new object[] { instance as DependencyObject };
if (_member.IsAttachable)
{
result = (bool)_shouldSerializeMethod.Invoke(null, args);
}
else
{
result = (bool)_shouldSerializeMethod.Invoke(instance, args);
}
return result ? ShouldSerializeResult.True : ShouldSerializeResult.False;
}
DependencyObject dObject = instance as DependencyObject;
if (dObject != null && _member.DependencyProperty != null)
{
// Call DO's ShouldSerializeProperty to see if the property is set.
// If the property is unset, the property should not be serialized
bool isPropertySet = dObject.ShouldSerializeProperty(_member.DependencyProperty);
if (!isPropertySet)
{
return ShouldSerializeResult.False;
}
}
return base.ShouldSerializeValue(instance);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlCharType.cs
- WindowExtensionMethods.cs
- PassportIdentity.cs
- RichTextBoxAutomationPeer.cs
- ColumnWidthChangedEvent.cs
- NativeMethods.cs
- RenderContext.cs
- SourceChangedEventArgs.cs
- MouseBinding.cs
- GridViewDeletedEventArgs.cs
- JournalEntryStack.cs
- InkCanvasFeedbackAdorner.cs
- CriticalExceptions.cs
- Int64AnimationBase.cs
- URL.cs
- CancellationScope.cs
- HelloMessageCD1.cs
- LowerCaseStringConverter.cs
- Window.cs
- NestPullup.cs
- ExceptionUtil.cs
- DeclarativeExpressionConditionDeclaration.cs
- BufferModesCollection.cs
- ImageButton.cs
- PathHelper.cs
- CollectionViewGroupInternal.cs
- TextRangeSerialization.cs
- ContentPosition.cs
- SimpleRecyclingCache.cs
- BitmapEffectGroup.cs
- smtppermission.cs
- WorkerRequest.cs
- DataGridCommandEventArgs.cs
- MobileComponentEditorPage.cs
- TimeSpanFormat.cs
- FormView.cs
- AnonymousIdentificationSection.cs
- ProbeRequestResponseAsyncResult.cs
- Condition.cs
- ChildTable.cs
- XslCompiledTransform.cs
- DbProviderSpecificTypePropertyAttribute.cs
- WebPartDisplayModeCollection.cs
- CollectionEditVerbManager.cs
- XmlSecureResolver.cs
- EnterpriseServicesHelper.cs
- AnimatedTypeHelpers.cs
- SafeNativeMethods.cs
- FormViewCommandEventArgs.cs
- ExpressionNormalizer.cs
- DesignerActionListCollection.cs
- WebSysDefaultValueAttribute.cs
- HostingPreferredMapPath.cs
- RefreshResponseInfo.cs
- SaveFileDialog.cs
- SqlNotificationRequest.cs
- ImagingCache.cs
- GridViewCancelEditEventArgs.cs
- MaskedTextBox.cs
- XmlSchemaRedefine.cs
- StrongNameKeyPair.cs
- CommonXSendMessage.cs
- AuthenticationModuleElement.cs
- FontNamesConverter.cs
- SqlSelectStatement.cs
- SmtpNetworkElement.cs
- HttpModuleActionCollection.cs
- VolatileResourceManager.cs
- DetailsViewActionList.cs
- ConcurrencyMode.cs
- UIElementHelper.cs
- WebMessageEncodingElement.cs
- PermissionAttributes.cs
- PersonalizablePropertyEntry.cs
- StreamMarshaler.cs
- WebPartHeaderCloseVerb.cs
- NotEqual.cs
- ForwardPositionQuery.cs
- DataGridViewLinkColumn.cs
- NullReferenceException.cs
- CompositeCollectionView.cs
- XmlBinaryReader.cs
- ContainerVisual.cs
- SelectionRangeConverter.cs
- DecimalConverter.cs
- SqlCrossApplyToCrossJoin.cs
- EventWaitHandleSecurity.cs
- ToolStripComboBox.cs
- CacheRequest.cs
- ControlEvent.cs
- AbandonedMutexException.cs
- BuilderPropertyEntry.cs
- EmbossBitmapEffect.cs
- DatagridviewDisplayedBandsData.cs
- RewritingSimplifier.cs
- SpellerError.cs
- SafeArrayRankMismatchException.cs
- GenericTypeParameterBuilder.cs
- ImagingCache.cs
- EllipticalNodeOperations.cs