Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Framework / System / Windows / Input / Command / CommandValueSerializer.cs / 1 / CommandValueSerializer.cs
//------------------------------------------------------------------------ // // Microsoft Windows Client Platform // Copyright (C) Microsoft Corporation, 2005 // // File: CommandValueSerializer.cs // // Contents: ValueSerializer for the ICommand interface // // Created: 04/28/2005 chuckj // //----------------------------------------------------------------------- namespace System.Windows.Input { using System; using System.Collections.Generic; using System.Text; using System.Windows.Markup; using System.Windows.Documents; // EditingCommands using System.Reflection; internal class CommandValueSerializer : ValueSerializer { public override bool CanConvertToString(object value, IValueSerializerContext context) { if (context == null || context.GetValueSerializerFor(typeof(Type)) == null) return false; // Can only convert routed commands RoutedCommand command = value as RoutedCommand; if (command == null || command.OwnerType == null) { return false; } if (CommandConverter.IsKnownType(command.OwnerType)) { return true; } else { string localName = command.Name + "Command"; Type ownerType = command.OwnerType; string typeName = ownerType.Name; // Get them from Properties PropertyInfo propertyInfo = ownerType.GetProperty(localName, BindingFlags.Public | BindingFlags.Static); if (propertyInfo != null) return true; // Get them from Fields (ScrollViewer.PageDownCommand is a static readonly field FieldInfo fieldInfo = ownerType.GetField(localName, BindingFlags.Static | BindingFlags.Public); if (fieldInfo != null) return true; } return false; } public override bool CanConvertFromString(string value, IValueSerializerContext context) { return true; } public override string ConvertToString(object value, IValueSerializerContext context) { if (value != null) { RoutedCommand command = value as RoutedCommand; if (null != command && null != command.OwnerType) { // Known Commands, so write shorter version if (CommandConverter.IsKnownType(command.OwnerType)) { return command.Name; } else { ValueSerializer typeSerializer = null; if (context == null) { throw new InvalidOperationException(SR.Get(SRID.ValueSerializerContextUnavailable, this.GetType().Name )); } // Get the ValueSerializer for the System.Type type typeSerializer = context.GetValueSerializerFor(typeof(Type)); if (typeSerializer == null) { throw new InvalidOperationException(SR.Get(SRID.TypeValueSerializerUnavailable, this.GetType().Name )); } return typeSerializer.ConvertToString(command.OwnerType, context) + "." + command.Name + "Command"; } } } else return string.Empty; throw GetConvertToException(value, typeof(string)); } public override IEnumerableTypeReferences(object value, IValueSerializerContext context) { if (value != null) { RoutedCommand command = value as RoutedCommand; if (command != null) { if (command.OwnerType != null && !CommandConverter.IsKnownType(command.OwnerType)) { return new Type[] { command.OwnerType }; } } } return base.TypeReferences(value, context); } public override object ConvertFromString(string value, IValueSerializerContext context) { if (value != null) { if (value != String.Empty) { Type declaringType = null; String commandName; // Check for "ns:Class.Command" syntax. int dotIndex = value.IndexOf('.'); if (dotIndex >= 0) { // We have "ns:Class.Command" syntax. // Find the type name in the form of "ns:Class". string typeName = value.Substring(0, dotIndex); if (context == null) { throw new InvalidOperationException(SR.Get(SRID.ValueSerializerContextUnavailable, this.GetType().Name )); } // Get the ValueSerializer for the System.Type type ValueSerializer typeSerializer = context.GetValueSerializerFor(typeof(Type)); if (typeSerializer == null) { throw new InvalidOperationException(SR.Get(SRID.TypeValueSerializerUnavailable, this.GetType().Name )); } // Use the TypeValueSerializer to parse the "ns:Class" into a System.Type. declaringType = typeSerializer.ConvertFromString(typeName, context) as Type; // Strip out the "Command" part of "ns:Class.Command". commandName = value.Substring(dotIndex + 1).Trim(); } else { // Assume the known commands commandName = value.Trim(); } // Find the command given the declaring type & name (this is shared with CommandConverter) ICommand command = CommandConverter.ConvertFromHelper( declaringType, commandName ); if (command != null) { return command; } } else { return null; // String.Empty <==> null , (for roundtrip cases where Command property values are null) } } return base.ConvertFromString(value, context); } } } // 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
- SelectionPattern.cs
- CompilationRelaxations.cs
- BulletedList.cs
- DbParameterHelper.cs
- ColorContext.cs
- InputReport.cs
- SineEase.cs
- HandleExceptionArgs.cs
- BulletChrome.cs
- FrameworkContentElement.cs
- ObjectNotFoundException.cs
- DesignTimeParseData.cs
- MULTI_QI.cs
- StringExpressionSet.cs
- MouseGesture.cs
- FileChangesMonitor.cs
- QueryExtender.cs
- RowUpdatedEventArgs.cs
- TimeoutHelper.cs
- ContextInformation.cs
- SignatureToken.cs
- Adorner.cs
- HtmlTernaryTree.cs
- AttributedMetaModel.cs
- TableTextElementCollectionInternal.cs
- CodeExpressionStatement.cs
- RelatedImageListAttribute.cs
- securestring.cs
- SiteMapHierarchicalDataSourceView.cs
- ImageSource.cs
- CompilerWrapper.cs
- BitVector32.cs
- JulianCalendar.cs
- ObjectConverter.cs
- TextBoxAutoCompleteSourceConverter.cs
- ConsoleKeyInfo.cs
- UpdateManifestForBrowserApplication.cs
- ToolStripStatusLabel.cs
- wmiutil.cs
- TypeBuilderInstantiation.cs
- _OSSOCK.cs
- SocketStream.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- EventLogWatcher.cs
- GridPattern.cs
- DataGridViewSelectedCellCollection.cs
- ListViewInsertEventArgs.cs
- InheritablePropertyChangeInfo.cs
- ListViewGroupItemCollection.cs
- Annotation.cs
- AspProxy.cs
- AsyncStreamReader.cs
- SchemaCollectionCompiler.cs
- SplitContainerDesigner.cs
- RectAnimationUsingKeyFrames.cs
- XmlSerializerFactory.cs
- HexParser.cs
- WindowsToolbarItemAsMenuItem.cs
- ObjectAnimationBase.cs
- DesigntimeLicenseContextSerializer.cs
- MenuItem.cs
- ProcessThreadDesigner.cs
- ParagraphVisual.cs
- ButtonChrome.cs
- ConfigurationLocationCollection.cs
- InvokeHandlers.cs
- PlainXmlSerializer.cs
- XPathAxisIterator.cs
- SequenceDesigner.xaml.cs
- RelatedCurrencyManager.cs
- MenuAutomationPeer.cs
- DBConnection.cs
- Group.cs
- TraceLevelStore.cs
- SubMenuStyleCollectionEditor.cs
- SendMailErrorEventArgs.cs
- InitializeCorrelation.cs
- DbConnectionStringCommon.cs
- ConstraintEnumerator.cs
- SafeFileMapViewHandle.cs
- DataKeyArray.cs
- AnchoredBlock.cs
- StoreItemCollection.cs
- DataFormats.cs
- RegexCharClass.cs
- TextFragmentEngine.cs
- ProcessProtocolHandler.cs
- FolderLevelBuildProvider.cs
- XhtmlConformanceSection.cs
- SqlMultiplexer.cs
- BamlResourceSerializer.cs
- ToolStripTextBox.cs
- ContainerVisual.cs
- TreeNodeCollection.cs
- DataGridAutoGeneratingColumnEventArgs.cs
- ClientSideQueueItem.cs
- EntityCollection.cs
- IPCCacheManager.cs
- AudioStateChangedEventArgs.cs
- MenuAdapter.cs