Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / Markup / RoutedEventConverter.cs / 1 / RoutedEventConverter.cs
// Copyright (C) Microsoft Corporation. All rights reserved. using System.ComponentModel; using System.Globalization; using System.Windows; namespace System.Windows.Markup { ////// Type converter for RoutedEvent type /// public sealed class RoutedEventConverter: TypeConverter { ////// Whether we can convert from a given type - this class only converts from string /// public override bool CanConvertFrom(ITypeDescriptorContext typeDescriptorContext, Type sourceType) { // We can only convert from a string and that too only if we have all the contextual information // Note: Sometimes even the serializer calls CanConvertFrom in order // to determine if it is a valid converter to use for serialization. if (sourceType == typeof(string) && (typeDescriptorContext is TypeConvertContext)) { return true; } return false; } ////// Whether we can convert to a given type - this class only converts to string /// public override bool CanConvertTo(ITypeDescriptorContext typeDescriptorContext, Type destinationType) { return false; } ////// Convert a string like "Button.Click" into the corresponding RoutedEvent /// public override object ConvertFrom(ITypeDescriptorContext typeDescriptorContext, CultureInfo cultureInfo, object source) { string routedEventName = source as string; if( routedEventName != null ) { IServiceProvider serviceProvier = typeDescriptorContext as IServiceProvider; if (serviceProvier != null) { TypeConvertContext typeConvertContext = typeDescriptorContext as TypeConvertContext; ParserContext parserContext = typeConvertContext == null ? null : typeConvertContext.ParserContext; if( parserContext != null ) { XamlTypeMapper xamlTypeMapper = parserContext.XamlTypeMapper; if( xamlTypeMapper != null ) { RoutedEvent routedEvent; string nameSpace; nameSpace = ExtractNamespaceString( ref routedEventName, parserContext ); // Verify that there's at least one period. (A simple // but not foolproof check for "[class].[event]") if( routedEventName.IndexOf('.') != -1 ) { // When xamlTypeMapper is told to look for RoutedEventID, // we need "[class].[event]" because at this point we // have no idea what the owner type might be. // Fortunately, given "[class].[event]" xamlTypeMapper.GetRoutedEventID // can figure things out, so at this point we can pass // in 'null' for the ownerType and things will still work. routedEvent = xamlTypeMapper.GetRoutedEvent(null /* ownerType */, nameSpace, routedEventName); return routedEvent; } } } } } // Falling through here means we are unable to perform the conversion. throw GetConvertFromException(source); } ////// Convert a RoutedEventID into a XAML string like "Button.Click" /// public override object ConvertTo(ITypeDescriptorContext typeDescriptorContext, CultureInfo cultureInfo, object value, Type destinationType) { throw GetConvertToException(value, destinationType); } // This routine is copied from TemplateBamlRecordReader. This functionality // is planned to be part of the utilities exposed by the parser, eliminating // the need to duplicate code. See task #18279 private string ExtractNamespaceString( ref string nameString, ParserContext parserContext ) { // The colon is what we look for to determine if there's a namespace prefix specifier. int nsIndex = nameString.IndexOf(':'); string nsPrefix = string.Empty; if( nsIndex != -1 ) { // Found a namespace prefix separator, so create replacement propertyName. // String processing - split "foons" from "BarClass.BazProp" nsPrefix = nameString.Substring (0, nsIndex); nameString = nameString.Substring (nsIndex + 1); } // Find the namespace, even if its the default one string namespaceURI = parserContext.XmlnsDictionary[nsPrefix]; if (namespaceURI == null) { throw new ArgumentException(SR.Get(SRID.ParserPrefixNSProperty, nsPrefix, nameString)); } return namespaceURI; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (C) Microsoft Corporation. All rights reserved. using System.ComponentModel; using System.Globalization; using System.Windows; namespace System.Windows.Markup { ////// Type converter for RoutedEvent type /// public sealed class RoutedEventConverter: TypeConverter { ////// Whether we can convert from a given type - this class only converts from string /// public override bool CanConvertFrom(ITypeDescriptorContext typeDescriptorContext, Type sourceType) { // We can only convert from a string and that too only if we have all the contextual information // Note: Sometimes even the serializer calls CanConvertFrom in order // to determine if it is a valid converter to use for serialization. if (sourceType == typeof(string) && (typeDescriptorContext is TypeConvertContext)) { return true; } return false; } ////// Whether we can convert to a given type - this class only converts to string /// public override bool CanConvertTo(ITypeDescriptorContext typeDescriptorContext, Type destinationType) { return false; } ////// Convert a string like "Button.Click" into the corresponding RoutedEvent /// public override object ConvertFrom(ITypeDescriptorContext typeDescriptorContext, CultureInfo cultureInfo, object source) { string routedEventName = source as string; if( routedEventName != null ) { IServiceProvider serviceProvier = typeDescriptorContext as IServiceProvider; if (serviceProvier != null) { TypeConvertContext typeConvertContext = typeDescriptorContext as TypeConvertContext; ParserContext parserContext = typeConvertContext == null ? null : typeConvertContext.ParserContext; if( parserContext != null ) { XamlTypeMapper xamlTypeMapper = parserContext.XamlTypeMapper; if( xamlTypeMapper != null ) { RoutedEvent routedEvent; string nameSpace; nameSpace = ExtractNamespaceString( ref routedEventName, parserContext ); // Verify that there's at least one period. (A simple // but not foolproof check for "[class].[event]") if( routedEventName.IndexOf('.') != -1 ) { // When xamlTypeMapper is told to look for RoutedEventID, // we need "[class].[event]" because at this point we // have no idea what the owner type might be. // Fortunately, given "[class].[event]" xamlTypeMapper.GetRoutedEventID // can figure things out, so at this point we can pass // in 'null' for the ownerType and things will still work. routedEvent = xamlTypeMapper.GetRoutedEvent(null /* ownerType */, nameSpace, routedEventName); return routedEvent; } } } } } // Falling through here means we are unable to perform the conversion. throw GetConvertFromException(source); } ////// Convert a RoutedEventID into a XAML string like "Button.Click" /// public override object ConvertTo(ITypeDescriptorContext typeDescriptorContext, CultureInfo cultureInfo, object value, Type destinationType) { throw GetConvertToException(value, destinationType); } // This routine is copied from TemplateBamlRecordReader. This functionality // is planned to be part of the utilities exposed by the parser, eliminating // the need to duplicate code. See task #18279 private string ExtractNamespaceString( ref string nameString, ParserContext parserContext ) { // The colon is what we look for to determine if there's a namespace prefix specifier. int nsIndex = nameString.IndexOf(':'); string nsPrefix = string.Empty; if( nsIndex != -1 ) { // Found a namespace prefix separator, so create replacement propertyName. // String processing - split "foons" from "BarClass.BazProp" nsPrefix = nameString.Substring (0, nsIndex); nameString = nameString.Substring (nsIndex + 1); } // Find the namespace, even if its the default one string namespaceURI = parserContext.XmlnsDictionary[nsPrefix]; if (namespaceURI == null) { throw new ArgumentException(SR.Get(SRID.ParserPrefixNSProperty, nsPrefix, nameString)); } return namespaceURI; } } } // 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
- codemethodreferenceexpression.cs
- OrderByQueryOptionExpression.cs
- ObjectPersistData.cs
- DataGridViewCellPaintingEventArgs.cs
- FormatterConverter.cs
- LightweightCodeGenerator.cs
- TreeViewDesigner.cs
- QualifiedId.cs
- MtomMessageEncoder.cs
- ObjectListShowCommandsEventArgs.cs
- JsonByteArrayDataContract.cs
- InvalidDataException.cs
- TextBoxBase.cs
- HtmlElementErrorEventArgs.cs
- DataGridDetailsPresenter.cs
- SignatureTargetIdManager.cs
- Mutex.cs
- ToolboxItemFilterAttribute.cs
- SqlDataSourceSelectingEventArgs.cs
- ResourceIDHelper.cs
- TextDecorationCollection.cs
- ItemContainerGenerator.cs
- SoapException.cs
- IsolatedStorageFileStream.cs
- SymbolUsageManager.cs
- BackoffTimeoutHelper.cs
- DataGridPagerStyle.cs
- EntityDataSourceWrapperPropertyDescriptor.cs
- GridEntry.cs
- ApplicationId.cs
- safemediahandle.cs
- ResourcePropertyMemberCodeDomSerializer.cs
- QuarticEase.cs
- DateTimeOffsetAdapter.cs
- SectionInformation.cs
- EqualityComparer.cs
- SerializableAttribute.cs
- NominalTypeEliminator.cs
- LinkConverter.cs
- KeyToListMap.cs
- BaseDataBoundControl.cs
- DeflateStreamAsyncResult.cs
- EncoderExceptionFallback.cs
- DebugView.cs
- VirtualPathUtility.cs
- SettingsPropertyCollection.cs
- DataTableMapping.cs
- BuildProvider.cs
- RawTextInputReport.cs
- Rotation3DAnimation.cs
- ListViewGroupCollectionEditor.cs
- LayoutExceptionEventArgs.cs
- DataGridAutomationPeer.cs
- MenuAutomationPeer.cs
- DebuggerAttributes.cs
- DesignTimeTemplateParser.cs
- ThrowHelper.cs
- PathTooLongException.cs
- StringResourceManager.cs
- ServiceDurableInstanceContextProvider.cs
- MethodBody.cs
- RecognizerBase.cs
- AccessViolationException.cs
- OracleTransaction.cs
- WindowsAltTab.cs
- ReferentialConstraint.cs
- CustomPopupPlacement.cs
- SigningDialog.cs
- NameValuePair.cs
- ParserOptions.cs
- PropertyCondition.cs
- Number.cs
- DocumentXPathNavigator.cs
- TraceEventCache.cs
- MonthChangedEventArgs.cs
- CodeAccessSecurityEngine.cs
- AddInStore.cs
- TabletCollection.cs
- ParentUndoUnit.cs
- WorkItem.cs
- DBAsyncResult.cs
- MouseBinding.cs
- X500Name.cs
- XPathAncestorIterator.cs
- DbException.cs
- EncoderFallback.cs
- HttpsHostedTransportConfiguration.cs
- Base64Encoder.cs
- DetailsViewCommandEventArgs.cs
- TemplateNameScope.cs
- X509Certificate2.cs
- Util.cs
- CodeExpressionStatement.cs
- ICspAsymmetricAlgorithm.cs
- HttpGetProtocolImporter.cs
- Int64Converter.cs
- Utils.cs
- ListViewContainer.cs
- MonikerSyntaxException.cs
- AxHost.cs