Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Media / Animation / RepeatBehaviorConverter.cs / 1305600 / RepeatBehaviorConverter.cs
//------------------------------------------------------------------------------ // Microsoft Windows Client Platform // Copyright (c) Microsoft Corporation, 2004 // // File: RepeatBehaviorConverter.cs //----------------------------------------------------------------------------- using System; using System.ComponentModel; using System.ComponentModel.Design.Serialization; using System.Diagnostics; using System.Globalization; using System.Reflection; using System.Security; namespace System.Windows.Media.Animation { ////// /// public sealed class RepeatBehaviorConverter : TypeConverter { #region Data private static char[] _iterationCharacter = new char[] { 'x' }; #endregion ////// CanConvertFrom - Returns whether or not this class can convert from a given type /// ///public override bool CanConvertFrom(ITypeDescriptorContext td, Type t) { if (t == typeof(string)) { return true; } else { return false; } } /// /// TypeConverter method override. /// /// ITypeDescriptorContext /// Type to convert to ///true if conversion is possible ///public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if ( destinationType == typeof(InstanceDescriptor) || destinationType == typeof(string)) { return true; } else { return false; } } /// /// ConvertFrom /// ///public override object ConvertFrom( ITypeDescriptorContext td, CultureInfo cultureInfo, object value) { string stringValue = value as string; if (stringValue != null) { stringValue = stringValue.Trim(); if (stringValue == "Forever") { return RepeatBehavior.Forever; } else if ( stringValue.Length > 0 && stringValue[stringValue.Length - 1] == _iterationCharacter[0]) { string stringDoubleValue = stringValue.TrimEnd(_iterationCharacter); double doubleValue = (double)TypeDescriptor.GetConverter(typeof(double)).ConvertFrom(td, cultureInfo, stringDoubleValue); return new RepeatBehavior(doubleValue); } } // The value is not Forever or an iteration count so it's either a TimeSpan // or we'll let the TimeSpanConverter raise the appropriate exception. TimeSpan timeSpanValue = (TimeSpan)TypeDescriptor.GetConverter(typeof(TimeSpan)).ConvertFrom(td, cultureInfo, stringValue); return new RepeatBehavior(timeSpanValue); } /// /// TypeConverter method implementation. /// /// ITypeDescriptorContext /// current culture (see CLR specs) /// value to convert from /// Type to convert to ///converted value ////// /// Critical: calls InstanceDescriptor ctor which LinkDemands /// PublicOK: can only make an InstanceDescriptor for RepeatBehavior, not an arbitrary class /// [SecurityCritical] public override object ConvertTo( ITypeDescriptorContext context, CultureInfo cultureInfo, object value, Type destinationType) { if ( value is RepeatBehavior && destinationType != null) { RepeatBehavior repeatBehavior = (RepeatBehavior)value; if (destinationType == typeof(InstanceDescriptor)) { MemberInfo mi; if (repeatBehavior == RepeatBehavior.Forever) { mi = typeof(RepeatBehavior).GetProperty("Forever"); return new InstanceDescriptor(mi, null); } else if (repeatBehavior.HasCount) { mi = typeof(RepeatBehavior).GetConstructor(new Type[] { typeof(double) }); return new InstanceDescriptor(mi, new object[] { repeatBehavior.Count }); } else if (repeatBehavior.HasDuration) { mi = typeof(RepeatBehavior).GetConstructor(new Type[] { typeof(TimeSpan) }); return new InstanceDescriptor(mi, new object[] { repeatBehavior.Duration }); } else { Debug.Fail("Unknown type of RepeatBehavior passed to RepeatBehaviorConverter."); } } else if (destinationType == typeof(string)) { return repeatBehavior.InternalToString(null, cultureInfo); } } // We can't do the conversion, let the base class raise the // appropriate exception. return base.ConvertTo(context, cultureInfo, value, destinationType); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ // Microsoft Windows Client Platform // Copyright (c) Microsoft Corporation, 2004 // // File: RepeatBehaviorConverter.cs //----------------------------------------------------------------------------- using System; using System.ComponentModel; using System.ComponentModel.Design.Serialization; using System.Diagnostics; using System.Globalization; using System.Reflection; using System.Security; namespace System.Windows.Media.Animation { ////// /// public sealed class RepeatBehaviorConverter : TypeConverter { #region Data private static char[] _iterationCharacter = new char[] { 'x' }; #endregion ////// CanConvertFrom - Returns whether or not this class can convert from a given type /// ///public override bool CanConvertFrom(ITypeDescriptorContext td, Type t) { if (t == typeof(string)) { return true; } else { return false; } } /// /// TypeConverter method override. /// /// ITypeDescriptorContext /// Type to convert to ///true if conversion is possible ///public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if ( destinationType == typeof(InstanceDescriptor) || destinationType == typeof(string)) { return true; } else { return false; } } /// /// ConvertFrom /// ///public override object ConvertFrom( ITypeDescriptorContext td, CultureInfo cultureInfo, object value) { string stringValue = value as string; if (stringValue != null) { stringValue = stringValue.Trim(); if (stringValue == "Forever") { return RepeatBehavior.Forever; } else if ( stringValue.Length > 0 && stringValue[stringValue.Length - 1] == _iterationCharacter[0]) { string stringDoubleValue = stringValue.TrimEnd(_iterationCharacter); double doubleValue = (double)TypeDescriptor.GetConverter(typeof(double)).ConvertFrom(td, cultureInfo, stringDoubleValue); return new RepeatBehavior(doubleValue); } } // The value is not Forever or an iteration count so it's either a TimeSpan // or we'll let the TimeSpanConverter raise the appropriate exception. TimeSpan timeSpanValue = (TimeSpan)TypeDescriptor.GetConverter(typeof(TimeSpan)).ConvertFrom(td, cultureInfo, stringValue); return new RepeatBehavior(timeSpanValue); } /// /// TypeConverter method implementation. /// /// ITypeDescriptorContext /// current culture (see CLR specs) /// value to convert from /// Type to convert to ///converted value ////// /// Critical: calls InstanceDescriptor ctor which LinkDemands /// PublicOK: can only make an InstanceDescriptor for RepeatBehavior, not an arbitrary class /// [SecurityCritical] public override object ConvertTo( ITypeDescriptorContext context, CultureInfo cultureInfo, object value, Type destinationType) { if ( value is RepeatBehavior && destinationType != null) { RepeatBehavior repeatBehavior = (RepeatBehavior)value; if (destinationType == typeof(InstanceDescriptor)) { MemberInfo mi; if (repeatBehavior == RepeatBehavior.Forever) { mi = typeof(RepeatBehavior).GetProperty("Forever"); return new InstanceDescriptor(mi, null); } else if (repeatBehavior.HasCount) { mi = typeof(RepeatBehavior).GetConstructor(new Type[] { typeof(double) }); return new InstanceDescriptor(mi, new object[] { repeatBehavior.Count }); } else if (repeatBehavior.HasDuration) { mi = typeof(RepeatBehavior).GetConstructor(new Type[] { typeof(TimeSpan) }); return new InstanceDescriptor(mi, new object[] { repeatBehavior.Duration }); } else { Debug.Fail("Unknown type of RepeatBehavior passed to RepeatBehaviorConverter."); } } else if (destinationType == typeof(string)) { return repeatBehavior.InternalToString(null, cultureInfo); } } // We can't do the conversion, let the base class raise the // appropriate exception. return base.ConvertTo(context, cultureInfo, value, destinationType); } } } // 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
- BuilderPropertyEntry.cs
- Permission.cs
- KnownBoxes.cs
- FocusManager.cs
- DataServiceRequest.cs
- RootProfilePropertySettingsCollection.cs
- StateDesigner.CommentLayoutGlyph.cs
- HtmlAnchor.cs
- RevocationPoint.cs
- GroupByExpressionRewriter.cs
- BevelBitmapEffect.cs
- DBCommandBuilder.cs
- ApplicationException.cs
- Pair.cs
- cookie.cs
- SHA256.cs
- TextRangeBase.cs
- ServerIdentity.cs
- ProtectedProviderSettings.cs
- ExtensibleClassFactory.cs
- SapiRecoContext.cs
- DataDocumentXPathNavigator.cs
- DataGridViewTopLeftHeaderCell.cs
- MD5CryptoServiceProvider.cs
- XmlAttributeAttribute.cs
- PathSegmentCollection.cs
- ActivityTypeDesigner.xaml.cs
- Pkcs7Signer.cs
- RelationshipConverter.cs
- XmlObjectSerializerReadContext.cs
- BaseContextMenu.cs
- DecimalConverter.cs
- ButtonField.cs
- JournalEntryListConverter.cs
- PropertyNames.cs
- PresentationTraceSources.cs
- CompoundFileStorageReference.cs
- SoapProtocolReflector.cs
- MbpInfo.cs
- VsPropertyGrid.cs
- TemplateBindingExpressionConverter.cs
- PasswordRecovery.cs
- ComponentResourceManager.cs
- BamlLocalizationDictionary.cs
- X509Chain.cs
- hresults.cs
- InstanceKeyView.cs
- WriterOutput.cs
- InteropBitmapSource.cs
- BookmarkList.cs
- XmlSerializationGeneratedCode.cs
- XPathNodePointer.cs
- XmlTextReaderImplHelpers.cs
- Propagator.JoinPropagator.cs
- ScrollChrome.cs
- WebBrowserNavigatingEventHandler.cs
- AccessText.cs
- ReceiveActivityDesignerTheme.cs
- ProfileInfo.cs
- XmlWriterSettings.cs
- RelatedView.cs
- TransformCollection.cs
- IndexOutOfRangeException.cs
- __Filters.cs
- Function.cs
- ContextBase.cs
- DataBoundControl.cs
- MarkedHighlightComponent.cs
- Instrumentation.cs
- InputLanguageEventArgs.cs
- NCryptNative.cs
- ModifierKeysValueSerializer.cs
- DelayLoadType.cs
- OrderByBuilder.cs
- ApplicationBuildProvider.cs
- ClipboardData.cs
- DataBoundControlAdapter.cs
- GlobalProxySelection.cs
- UTF8Encoding.cs
- ComponentCodeDomSerializer.cs
- SqlDataSourceFilteringEventArgs.cs
- ServerType.cs
- AspProxy.cs
- SharedStatics.cs
- Renderer.cs
- AuthStoreRoleProvider.cs
- Component.cs
- DurableOperationContext.cs
- ISO2022Encoding.cs
- ConfigurationSectionGroup.cs
- ConstNode.cs
- FillErrorEventArgs.cs
- SplitterPanel.cs
- MetadataItemCollectionFactory.cs
- ResourceDescriptionAttribute.cs
- UserNameServiceElement.cs
- UpdateCommandGenerator.cs
- ResetableIterator.cs
- OracleInfoMessageEventArgs.cs
- NameValueSectionHandler.cs