Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Markup / StaticExtension.cs / 1305600 / StaticExtension.cs
/****************************************************************************\ * * File: StaticExtension.cs * * Class for Xaml markup extension for static field and property references. * * Copyright (C) 2004 by Microsoft Corporation. All rights reserved. * \***************************************************************************/ using System; using System.ComponentModel; using System.ComponentModel.Design.Serialization; using System.Windows.Input; using System.Reflection; using MS.Internal.WindowsBase; using MS.Utility; using System.Runtime.CompilerServices; using System.Windows.Markup; using System.Windows; namespace MS.Internal.Markup { ////// WPF wrapper for StaticExtension. Optimizes some common SystemResourceKeys & Commands /// internal class StaticExtension : System.Windows.Markup.StaticExtension { public StaticExtension() : base() { } public StaticExtension(String member) : base(member) { } ////// Return an object that should be set on the targetObject's targetProperty /// for this markup extension. For a StaticExtension this is a static field /// or property value. /// /// Object that can provide services for the markup extension. ////// The object to set on this property. /// public override object ProvideValue(IServiceProvider serviceProvider) { if (Member == null) { throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionStaticMember)); } object value; if (MemberType != null) { value = SystemResourceKey.GetSystemResourceKey(MemberType.Name + "." + Member); if (value != null) { return value; } } else { value = SystemResourceKey.GetSystemResourceKey(Member); if (value != null) { return value; } // Validate the _member int dotIndex = Member.IndexOf('.'); if (dotIndex < 0) { throw new ArgumentException(SR.Get(SRID.MarkupExtensionBadStatic, Member)); } // Pull out the type substring (this will include any XML prefix, e.g. "av:Button") string typeString = Member.Substring(0, dotIndex); if (typeString == string.Empty) { throw new ArgumentException(SR.Get(SRID.MarkupExtensionBadStatic, Member)); } // Get the IXamlTypeResolver from the service provider if (serviceProvider == null) { throw new ArgumentNullException("serviceProvider"); } IXamlTypeResolver xamlTypeResolver = serviceProvider.GetService(typeof(IXamlTypeResolver)) as IXamlTypeResolver; if (xamlTypeResolver == null) { throw new ArgumentException(SR.Get(SRID.MarkupExtensionNoContext, GetType().Name, "IXamlTypeResolver")); } // Use the type resolver to get a Type instance MemberType = xamlTypeResolver.Resolve(typeString); // Get the member name substring Member = Member.Substring(dotIndex + 1, Member.Length - dotIndex - 1); } value = CommandConverter.GetKnownControlCommand(MemberType, Member); if (value != null) { return value; } return base.ProvideValue(serviceProvider); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. /****************************************************************************\ * * File: StaticExtension.cs * * Class for Xaml markup extension for static field and property references. * * Copyright (C) 2004 by Microsoft Corporation. All rights reserved. * \***************************************************************************/ using System; using System.ComponentModel; using System.ComponentModel.Design.Serialization; using System.Windows.Input; using System.Reflection; using MS.Internal.WindowsBase; using MS.Utility; using System.Runtime.CompilerServices; using System.Windows.Markup; using System.Windows; namespace MS.Internal.Markup { ////// WPF wrapper for StaticExtension. Optimizes some common SystemResourceKeys & Commands /// internal class StaticExtension : System.Windows.Markup.StaticExtension { public StaticExtension() : base() { } public StaticExtension(String member) : base(member) { } ////// Return an object that should be set on the targetObject's targetProperty /// for this markup extension. For a StaticExtension this is a static field /// or property value. /// /// Object that can provide services for the markup extension. ////// The object to set on this property. /// public override object ProvideValue(IServiceProvider serviceProvider) { if (Member == null) { throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionStaticMember)); } object value; if (MemberType != null) { value = SystemResourceKey.GetSystemResourceKey(MemberType.Name + "." + Member); if (value != null) { return value; } } else { value = SystemResourceKey.GetSystemResourceKey(Member); if (value != null) { return value; } // Validate the _member int dotIndex = Member.IndexOf('.'); if (dotIndex < 0) { throw new ArgumentException(SR.Get(SRID.MarkupExtensionBadStatic, Member)); } // Pull out the type substring (this will include any XML prefix, e.g. "av:Button") string typeString = Member.Substring(0, dotIndex); if (typeString == string.Empty) { throw new ArgumentException(SR.Get(SRID.MarkupExtensionBadStatic, Member)); } // Get the IXamlTypeResolver from the service provider if (serviceProvider == null) { throw new ArgumentNullException("serviceProvider"); } IXamlTypeResolver xamlTypeResolver = serviceProvider.GetService(typeof(IXamlTypeResolver)) as IXamlTypeResolver; if (xamlTypeResolver == null) { throw new ArgumentException(SR.Get(SRID.MarkupExtensionNoContext, GetType().Name, "IXamlTypeResolver")); } // Use the type resolver to get a Type instance MemberType = xamlTypeResolver.Resolve(typeString); // Get the member name substring Member = Member.Substring(dotIndex + 1, Member.Length - dotIndex - 1); } value = CommandConverter.GetKnownControlCommand(MemberType, Member); if (value != null) { return value; } return base.ProvideValue(serviceProvider); } } } // 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
- WindowsFormsSectionHandler.cs
- SelectorAutomationPeer.cs
- WebBrowserBase.cs
- TextElementCollectionHelper.cs
- PropertyBuilder.cs
- SqlTypeSystemProvider.cs
- ListViewInsertedEventArgs.cs
- EndOfStreamException.cs
- DiagnosticEventProvider.cs
- WpfPayload.cs
- SimpleTypesSurrogate.cs
- ListControlConvertEventArgs.cs
- XmlText.cs
- DataGridSortingEventArgs.cs
- Symbol.cs
- ResourceType.cs
- FreezableCollection.cs
- ArraySet.cs
- StringDictionaryEditor.cs
- AmbiguousMatchException.cs
- TimeZoneInfo.cs
- SqlBulkCopy.cs
- HttpFileCollection.cs
- DataGridViewImageColumn.cs
- GeneralTransform2DTo3D.cs
- CompilationUtil.cs
- NotificationContext.cs
- _NativeSSPI.cs
- SimpleHandlerBuildProvider.cs
- CounterSampleCalculator.cs
- XmlSignificantWhitespace.cs
- ChangePassword.cs
- Model3DGroup.cs
- StrongNameHelpers.cs
- latinshape.cs
- XmlSchemaSimpleContentExtension.cs
- DataGridTable.cs
- LoginName.cs
- AssemblyCache.cs
- UserValidatedEventArgs.cs
- CharConverter.cs
- OleDbException.cs
- TextTrailingCharacterEllipsis.cs
- ComponentDispatcherThread.cs
- DocumentViewerBase.cs
- ToolStripMenuItem.cs
- SQLInt64Storage.cs
- ValidatingCollection.cs
- ISCIIEncoding.cs
- XmlEnumAttribute.cs
- FormView.cs
- RuntimeConfigurationRecord.cs
- coordinatorscratchpad.cs
- WizardPanel.cs
- ClientTarget.cs
- Splitter.cs
- ViewBase.cs
- EmptyEnumerator.cs
- XmlDocumentFragment.cs
- GZipDecoder.cs
- CacheDependency.cs
- ErrorEventArgs.cs
- DebugTraceHelper.cs
- IPipelineRuntime.cs
- Win32Exception.cs
- ReaderWriterLock.cs
- TypographyProperties.cs
- RegistryPermission.cs
- DivideByZeroException.cs
- NativeMethods.cs
- TextParaClient.cs
- AutomationPropertyInfo.cs
- DetailsViewCommandEventArgs.cs
- ObjectSelectorEditor.cs
- GradientStop.cs
- TimelineCollection.cs
- Token.cs
- GlobalProxySelection.cs
- StylesEditorDialog.cs
- WorkflowLayouts.cs
- TableLayoutStyleCollection.cs
- SqlClientPermission.cs
- OperationDescriptionCollection.cs
- PropertyMappingExceptionEventArgs.cs
- FileSystemInfo.cs
- PlacementWorkspace.cs
- TraceContextEventArgs.cs
- PlacementWorkspace.cs
- DataTemplate.cs
- XamlWriter.cs
- Group.cs
- LoginView.cs
- DataSvcMapFileSerializer.cs
- WhileDesigner.xaml.cs
- TextPattern.cs
- XPathNavigatorKeyComparer.cs
- TextEditorThreadLocalStore.cs
- Floater.cs
- SharedPersonalizationStateInfo.cs
- Pair.cs