Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- ParseElement.cs
- NamedPipeConnectionPool.cs
- remotingproxy.cs
- CompositeActivityTypeDescriptor.cs
- Utility.cs
- SafePipeHandle.cs
- DbCommandTree.cs
- BridgeDataRecord.cs
- basecomparevalidator.cs
- GlyphsSerializer.cs
- ToolStripItem.cs
- CheckBox.cs
- VisualCollection.cs
- ProcessHostServerConfig.cs
- TraceInternal.cs
- JapaneseLunisolarCalendar.cs
- SaveLedgerEntryRequest.cs
- ToolStripSettings.cs
- CopyOnWriteList.cs
- UnsafeNativeMethodsMilCoreApi.cs
- Cursor.cs
- CapabilitiesRule.cs
- Binding.cs
- TextBreakpoint.cs
- GeometryDrawing.cs
- AmbientProperties.cs
- AliasedExpr.cs
- Configuration.cs
- KeyInstance.cs
- MessageSecurityException.cs
- DataPointer.cs
- InputLangChangeRequestEvent.cs
- SettingsSection.cs
- CaseStatement.cs
- PermissionSetTriple.cs
- CompiledRegexRunnerFactory.cs
- SplayTreeNode.cs
- TypeUtils.cs
- MissingSatelliteAssemblyException.cs
- TypeGeneratedEventArgs.cs
- SqlRetyper.cs
- WindowsSspiNegotiation.cs
- ResourceSet.cs
- ButtonAutomationPeer.cs
- AuthenticationService.cs
- LinkConverter.cs
- PartialArray.cs
- ColorKeyFrameCollection.cs
- XmlBinaryReader.cs
- DropSource.cs
- UpdateProgress.cs
- EventLogSession.cs
- XPathScanner.cs
- DataList.cs
- CircleHotSpot.cs
- SessionConnectionReader.cs
- SqlClientWrapperSmiStreamChars.cs
- ETagAttribute.cs
- QueryCacheManager.cs
- InputMethodStateTypeInfo.cs
- CookielessHelper.cs
- MsmqInputChannelListener.cs
- QueryContinueDragEvent.cs
- PerformanceCounterPermissionEntryCollection.cs
- Baml6ConstructorInfo.cs
- ISessionStateStore.cs
- WpfKnownMember.cs
- OdbcUtils.cs
- NameValuePair.cs
- XmlSchemaType.cs
- OnOperation.cs
- PathGeometry.cs
- DSGeneratorProblem.cs
- ObjectStateEntryDbDataRecord.cs
- NativeCompoundFileAPIs.cs
- ViewKeyConstraint.cs
- LinqDataSourceInsertEventArgs.cs
- Number.cs
- PointCollection.cs
- XomlCompiler.cs
- GrammarBuilder.cs
- HttpApplicationFactory.cs
- CompiledScopeCriteria.cs
- IxmlLineInfo.cs
- VirtualizedItemPattern.cs
- DefaultObjectMappingItemCollection.cs
- BatchParser.cs
- ConstantProjectedSlot.cs
- EntitySqlException.cs
- Parser.cs
- WebPartVerbCollection.cs
- WorkflowDesigner.cs
- CryptoHandle.cs
- DataConnectionHelper.cs
- MimeMultiPart.cs
- FacetEnabledSchemaElement.cs
- COM2PropertyDescriptor.cs
- RelationshipSet.cs
- PolyBezierSegmentFigureLogic.cs