Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / WinFormsIntegration / System / Windows / Integration / PropertyMap.cs / 1 / PropertyMap.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Data;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Security.Permissions;
using System.Windows.Interop;
using MS.Win32;
using SD = System.Drawing;
using SWF = System.Windows.Forms;
using SW = System.Windows;
using SWC = System.Windows.Controls;
using SWM = System.Windows.Media;
using SWMI = System.Windows.Media.Imaging;
using SWS = System.Windows.Markup;
using SWI = System.Windows.Input;
using System.Reflection;
namespace System.Windows.Forms.Integration
{
///
/// Provides a translation function for a mapped property of the host control.
///
/// The host control (either WindowsFormsHost or ElementHost) whose property is being mapped.
/// The name of the property being translated.
/// The new value of the property
public delegate void PropertyTranslator(object host, String propertyName, object value);
///
/// Defines how property changes in the host control are mapped to the hosted control or element.
///
[PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]
[PermissionSet(SecurityAction.InheritanceDemand, Name = "FullTrust")]
public class PropertyMap
{
private object _sourceObject;
private Dictionary _defaultTranslators;
private Dictionary _wrappedDictionary;
///
/// Initializes a new instance of the PropertyMap class.
///
public PropertyMap()
{
_wrappedDictionary = new Dictionary();
}
///
/// Initializes a new instance of a System.Windows.Forms.Integration.PropertyMap.
///
public PropertyMap(object sourceObject)
: this()
{
_sourceObject = sourceObject;
}
///
/// Identifies the source of the properties in the property map.
///
protected object SourceObject
{
get
{
return _sourceObject;
}
}
///
/// Gets or sets the PropertyTranslator for the specified property name. If no
/// PropertyTranslator exists, it will be added to the property map. If a
/// PropertyTranslator already exists, it will be replaced.
///
/// The name of the host control property whose PropertyTranslator you want to get
/// or set.
///
public PropertyTranslator this[String propertyName]
{
get
{
ThrowIfPropertyDoesntExistOnSource(propertyName);
PropertyTranslator value;
if (_wrappedDictionary.TryGetValue(propertyName, out value))
{
return value;
}
return null;
}
set
{
//Run through our regular invalid property checks, then
//apply the translator
if (string.IsNullOrEmpty(propertyName))
{
throw new ArgumentNullException(string.Format(CultureInfo.CurrentCulture, SR.Get(SRID.WFI_NullArgument), "propertyName"));
}
if (value == null)
{
throw new ArgumentNullException(string.Format(CultureInfo.CurrentCulture, SR.Get(SRID.WFI_NullArgument), "translator"));
}
ThrowIfPropertyDoesntExistOnSource(propertyName);
_wrappedDictionary[propertyName] = value; //This will replace an existing mapping, unlike Add.
Apply(propertyName);
}
}
///
/// Returns an ICollection of strings identifying all of the host control
/// properties that have been mapped.
///
public ICollection Keys
{
get
{
return _wrappedDictionary.Keys;
}
}
///
/// Returns an ICollection of all PropertyTranslator delegates currently being used to
/// map the host control properties.
///
public ICollection Values
{
get
{
return _wrappedDictionary.Values;
}
}
///
/// Adds a PropertyTranslator delegate to the property map that runs when the specified property
/// of the host control changes.
///
/// A string containing the name of the host control property to translate.
/// A PropertyTranslator delegate which will be called when the specificied property changes.
public void Add(String propertyName, PropertyTranslator translator)
{
if (Contains(propertyName))
{
throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, SR.Get(SRID.WFI_PropertyMappingExists), propertyName));
}
this[propertyName] = translator;
}
private void ThrowIfPropertyDoesntExistOnSource(string propertyName)
{
if (SourceObject != null)
{
if (GetProperty(propertyName) == null)
{
// Property 'Foreground' doesn't exist on type 'Window'
throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, SR.Get(SRID.WFI_PropertyDoesntExist), propertyName, SourceObject.GetType().FullName));
}
}
}
///
/// Runs the PropertyTranslator for the given property, based on the
/// SourceObject's current value.
///
///
public void Apply(string propertyName)
{
if (Contains(propertyName))
{
ThrowIfPropertyDoesntExistOnSource(propertyName);
PropertyInfo property = GetProperty(propertyName);
if (property != null)
{
RunTranslator(this[propertyName], SourceObject, propertyName, property.GetValue(SourceObject, null));
}
}
}
///
/// Runs the PropertyTranslator for all properties, based on the
/// SourceObject's current values.
///
public void ApplyAll()
{
foreach (KeyValuePair entry in DefaultTranslators)
{
Apply(entry.Key);
}
}
private PropertyInfo GetProperty(string propertyName)
{
if (SourceObject == null)
{
return null;
}
return SourceObject.GetType().GetProperty(propertyName, Type.EmptyTypes);
}
///
/// Removes all property mappings from the property map so that the properties
/// are no longer translated.
///
public void Clear()
{
_wrappedDictionary.Clear();
}
///
/// Determines whether the specified property is being mapped.
///
/// A string containing the name of the host control property.
///
public bool Contains(String propertyName)
{
return _wrappedDictionary.ContainsKey(propertyName);
}
///
/// Removes the specified property from the property map so that the property is
/// no longer translated.
///
/// A string containing the name of the host control property.
public void Remove(String propertyName)
{
_wrappedDictionary.Remove(propertyName);
}
///
/// Gets the list of properties that are translated by default.
///
protected Dictionary DefaultTranslators
{
get
{
if (_defaultTranslators == null)
{
_defaultTranslators = new Dictionary();
}
return _defaultTranslators;
}
}
internal bool PropertyMappedToEmptyTranslator(string propertyName)
{
return (this[propertyName] == EmptyPropertyTranslator);
}
///
/// Translator for individual property
///
internal void EmptyPropertyTranslator(object host, string propertyName, object value)
{
}
///
/// Restores the default property mapping for the specified property.
///
/// A string containing the name of the host control property.
public void Reset(String propertyName)
{
if (string.IsNullOrEmpty(propertyName))
{
throw new ArgumentNullException(string.Format(CultureInfo.CurrentCulture, SR.Get(SRID.WFI_ArgumentNullOrEmpty), "propertyName"));
}
//Resetting means get the value from the list of default values,
//if it's there, otherwise removing the item you've added.
PropertyTranslator value;
if (DefaultTranslators.TryGetValue(propertyName, out value))
{
this[propertyName] = value;
}
else
{
Remove(propertyName);
}
}
///
/// Restores the default property mapping for all of the host control's properties.
///
public void ResetAll()
{
Clear();
AddDefaultPropertyTranslators();
}
private void AddDefaultPropertyTranslators()
{
foreach (KeyValuePair entry in DefaultTranslators)
{
Add(entry.Key, entry.Value);
}
}
///
/// Use this to look up and call the proper property translation delegate. This finds the
/// delegate in this mapping, and calls it with the parameters provided.
///
/// The host control (either WindowsFormsHost or ElementHost) whose property is being mapped.
/// The name of the property being translated.
/// The new value of the property.
internal void OnPropertyChanged(object host, string propertyName, object value)
{
PropertyTranslator translator;
if (!_wrappedDictionary.TryGetValue(propertyName, out translator) || translator == null)
{
return;
}
RunTranslator(translator, host, propertyName, value);
}
//Disable the PreSharp error 56500 Avoid `swallowing errors by catching non-specific exceptions.
//In this specific case, we are catching the exception and firing an event which can be handled in user code
//The user handling the event can make the determination on whether or not the exception should be rethrown
//(Wrapped in an InvalidOperationException).
#pragma warning disable 1634, 1691
#pragma warning disable 56500
internal void RunTranslator(PropertyTranslator translator, object host, string propertyName, object value)
{
try
{
translator(host, propertyName, value);
}
catch (Exception ex)
{
PropertyMappingExceptionEventArgs args = new PropertyMappingExceptionEventArgs(ex, propertyName, value);
if (_propertyMappingError != null)
{
_propertyMappingError(SourceObject, args);
}
if (args.ThrowException)
{
throw new InvalidOperationException(SR.Get(SRID.WFI_PropertyMapError), ex);
}
}
}
#pragma warning restore 56500
#pragma warning restore 1634, 1691
private event EventHandler _propertyMappingError;
///
/// Occurs when an exception is raised by a PropertyMap delegate.
///
public event EventHandler PropertyMappingError
{
add { _propertyMappingError += value; }
remove { _propertyMappingError -= value; }
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Data;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Security.Permissions;
using System.Windows.Interop;
using MS.Win32;
using SD = System.Drawing;
using SWF = System.Windows.Forms;
using SW = System.Windows;
using SWC = System.Windows.Controls;
using SWM = System.Windows.Media;
using SWMI = System.Windows.Media.Imaging;
using SWS = System.Windows.Markup;
using SWI = System.Windows.Input;
using System.Reflection;
namespace System.Windows.Forms.Integration
{
///
/// Provides a translation function for a mapped property of the host control.
///
/// The host control (either WindowsFormsHost or ElementHost) whose property is being mapped.
/// The name of the property being translated.
/// The new value of the property
public delegate void PropertyTranslator(object host, String propertyName, object value);
///
/// Defines how property changes in the host control are mapped to the hosted control or element.
///
[PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]
[PermissionSet(SecurityAction.InheritanceDemand, Name = "FullTrust")]
public class PropertyMap
{
private object _sourceObject;
private Dictionary _defaultTranslators;
private Dictionary _wrappedDictionary;
///
/// Initializes a new instance of the PropertyMap class.
///
public PropertyMap()
{
_wrappedDictionary = new Dictionary();
}
///
/// Initializes a new instance of a System.Windows.Forms.Integration.PropertyMap.
///
public PropertyMap(object sourceObject)
: this()
{
_sourceObject = sourceObject;
}
///
/// Identifies the source of the properties in the property map.
///
protected object SourceObject
{
get
{
return _sourceObject;
}
}
///
/// Gets or sets the PropertyTranslator for the specified property name. If no
/// PropertyTranslator exists, it will be added to the property map. If a
/// PropertyTranslator already exists, it will be replaced.
///
/// The name of the host control property whose PropertyTranslator you want to get
/// or set.
///
public PropertyTranslator this[String propertyName]
{
get
{
ThrowIfPropertyDoesntExistOnSource(propertyName);
PropertyTranslator value;
if (_wrappedDictionary.TryGetValue(propertyName, out value))
{
return value;
}
return null;
}
set
{
//Run through our regular invalid property checks, then
//apply the translator
if (string.IsNullOrEmpty(propertyName))
{
throw new ArgumentNullException(string.Format(CultureInfo.CurrentCulture, SR.Get(SRID.WFI_NullArgument), "propertyName"));
}
if (value == null)
{
throw new ArgumentNullException(string.Format(CultureInfo.CurrentCulture, SR.Get(SRID.WFI_NullArgument), "translator"));
}
ThrowIfPropertyDoesntExistOnSource(propertyName);
_wrappedDictionary[propertyName] = value; //This will replace an existing mapping, unlike Add.
Apply(propertyName);
}
}
///
/// Returns an ICollection of strings identifying all of the host control
/// properties that have been mapped.
///
public ICollection Keys
{
get
{
return _wrappedDictionary.Keys;
}
}
///
/// Returns an ICollection of all PropertyTranslator delegates currently being used to
/// map the host control properties.
///
public ICollection Values
{
get
{
return _wrappedDictionary.Values;
}
}
///
/// Adds a PropertyTranslator delegate to the property map that runs when the specified property
/// of the host control changes.
///
/// A string containing the name of the host control property to translate.
/// A PropertyTranslator delegate which will be called when the specificied property changes.
public void Add(String propertyName, PropertyTranslator translator)
{
if (Contains(propertyName))
{
throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, SR.Get(SRID.WFI_PropertyMappingExists), propertyName));
}
this[propertyName] = translator;
}
private void ThrowIfPropertyDoesntExistOnSource(string propertyName)
{
if (SourceObject != null)
{
if (GetProperty(propertyName) == null)
{
// Property 'Foreground' doesn't exist on type 'Window'
throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, SR.Get(SRID.WFI_PropertyDoesntExist), propertyName, SourceObject.GetType().FullName));
}
}
}
///
/// Runs the PropertyTranslator for the given property, based on the
/// SourceObject's current value.
///
///
public void Apply(string propertyName)
{
if (Contains(propertyName))
{
ThrowIfPropertyDoesntExistOnSource(propertyName);
PropertyInfo property = GetProperty(propertyName);
if (property != null)
{
RunTranslator(this[propertyName], SourceObject, propertyName, property.GetValue(SourceObject, null));
}
}
}
///
/// Runs the PropertyTranslator for all properties, based on the
/// SourceObject's current values.
///
public void ApplyAll()
{
foreach (KeyValuePair entry in DefaultTranslators)
{
Apply(entry.Key);
}
}
private PropertyInfo GetProperty(string propertyName)
{
if (SourceObject == null)
{
return null;
}
return SourceObject.GetType().GetProperty(propertyName, Type.EmptyTypes);
}
///
/// Removes all property mappings from the property map so that the properties
/// are no longer translated.
///
public void Clear()
{
_wrappedDictionary.Clear();
}
///
/// Determines whether the specified property is being mapped.
///
/// A string containing the name of the host control property.
///
public bool Contains(String propertyName)
{
return _wrappedDictionary.ContainsKey(propertyName);
}
///
/// Removes the specified property from the property map so that the property is
/// no longer translated.
///
/// A string containing the name of the host control property.
public void Remove(String propertyName)
{
_wrappedDictionary.Remove(propertyName);
}
///
/// Gets the list of properties that are translated by default.
///
protected Dictionary DefaultTranslators
{
get
{
if (_defaultTranslators == null)
{
_defaultTranslators = new Dictionary();
}
return _defaultTranslators;
}
}
internal bool PropertyMappedToEmptyTranslator(string propertyName)
{
return (this[propertyName] == EmptyPropertyTranslator);
}
///
/// Translator for individual property
///
internal void EmptyPropertyTranslator(object host, string propertyName, object value)
{
}
///
/// Restores the default property mapping for the specified property.
///
/// A string containing the name of the host control property.
public void Reset(String propertyName)
{
if (string.IsNullOrEmpty(propertyName))
{
throw new ArgumentNullException(string.Format(CultureInfo.CurrentCulture, SR.Get(SRID.WFI_ArgumentNullOrEmpty), "propertyName"));
}
//Resetting means get the value from the list of default values,
//if it's there, otherwise removing the item you've added.
PropertyTranslator value;
if (DefaultTranslators.TryGetValue(propertyName, out value))
{
this[propertyName] = value;
}
else
{
Remove(propertyName);
}
}
///
/// Restores the default property mapping for all of the host control's properties.
///
public void ResetAll()
{
Clear();
AddDefaultPropertyTranslators();
}
private void AddDefaultPropertyTranslators()
{
foreach (KeyValuePair entry in DefaultTranslators)
{
Add(entry.Key, entry.Value);
}
}
///
/// Use this to look up and call the proper property translation delegate. This finds the
/// delegate in this mapping, and calls it with the parameters provided.
///
/// The host control (either WindowsFormsHost or ElementHost) whose property is being mapped.
/// The name of the property being translated.
/// The new value of the property.
internal void OnPropertyChanged(object host, string propertyName, object value)
{
PropertyTranslator translator;
if (!_wrappedDictionary.TryGetValue(propertyName, out translator) || translator == null)
{
return;
}
RunTranslator(translator, host, propertyName, value);
}
//Disable the PreSharp error 56500 Avoid `swallowing errors by catching non-specific exceptions.
//In this specific case, we are catching the exception and firing an event which can be handled in user code
//The user handling the event can make the determination on whether or not the exception should be rethrown
//(Wrapped in an InvalidOperationException).
#pragma warning disable 1634, 1691
#pragma warning disable 56500
internal void RunTranslator(PropertyTranslator translator, object host, string propertyName, object value)
{
try
{
translator(host, propertyName, value);
}
catch (Exception ex)
{
PropertyMappingExceptionEventArgs args = new PropertyMappingExceptionEventArgs(ex, propertyName, value);
if (_propertyMappingError != null)
{
_propertyMappingError(SourceObject, args);
}
if (args.ThrowException)
{
throw new InvalidOperationException(SR.Get(SRID.WFI_PropertyMapError), ex);
}
}
}
#pragma warning restore 56500
#pragma warning restore 1634, 1691
private event EventHandler _propertyMappingError;
///
/// Occurs when an exception is raised by a PropertyMap delegate.
///
public event EventHandler PropertyMappingError
{
add { _propertyMappingError += value; }
remove { _propertyMappingError -= value; }
}
}
}
// 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
- SchemaImporterExtensionElement.cs
- SchemaImporterExtension.cs
- PaperSource.cs
- RectangleConverter.cs
- Directory.cs
- SqlProviderServices.cs
- FormViewDeletedEventArgs.cs
- ExtensionQuery.cs
- InstanceKey.cs
- CalendarDesigner.cs
- DataServiceQueryContinuation.cs
- SegmentInfo.cs
- InvalidBodyAccessException.cs
- documentsequencetextcontainer.cs
- ComEventsMethod.cs
- SamlAdvice.cs
- DynamicHyperLink.cs
- LocalizabilityAttribute.cs
- CombinedTcpChannel.cs
- HostUtils.cs
- WCFModelStrings.Designer.cs
- SourceFileInfo.cs
- AssociationTypeEmitter.cs
- JsonCollectionDataContract.cs
- _SslSessionsCache.cs
- TracePayload.cs
- ArrayWithOffset.cs
- ShaperBuffers.cs
- VirtualDirectoryMapping.cs
- TextServicesContext.cs
- WriteStateInfoBase.cs
- Baml6ConstructorInfo.cs
- ViewStateModeByIdAttribute.cs
- AccessDataSourceView.cs
- PageParserFilter.cs
- EditorZoneAutoFormat.cs
- SelectionBorderGlyph.cs
- TemplateControlParser.cs
- FixedBufferAttribute.cs
- NavigationEventArgs.cs
- JavaScriptObjectDeserializer.cs
- RC2CryptoServiceProvider.cs
- LeftCellWrapper.cs
- RegexCode.cs
- JumpPath.cs
- ProcessHost.cs
- Size.cs
- DefaultAssemblyResolver.cs
- EventLogEntryCollection.cs
- WebResourceAttribute.cs
- embossbitmapeffect.cs
- WebProxyScriptElement.cs
- FlowDocumentReader.cs
- activationcontext.cs
- NotifyIcon.cs
- ProxyWebPart.cs
- AliasedSlot.cs
- RegistrationContext.cs
- TraceSection.cs
- UidManager.cs
- XmlQueryOutput.cs
- OneToOneMappingSerializer.cs
- RecommendedAsConfigurableAttribute.cs
- RSACryptoServiceProvider.cs
- ColorConvertedBitmapExtension.cs
- PropertyIDSet.cs
- CallbackTimeoutsBehavior.cs
- SystemColorTracker.cs
- FixedSOMFixedBlock.cs
- StructuredType.cs
- StatusBarPanelClickEvent.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- ChineseLunisolarCalendar.cs
- Utils.cs
- StringInfo.cs
- _KerberosClient.cs
- TextRangeSerialization.cs
- WindowsListViewItemCheckBox.cs
- Point3DCollection.cs
- PreservationFileWriter.cs
- SecurityPermission.cs
- NotSupportedException.cs
- ExpressionVisitor.cs
- ApplicationInfo.cs
- DiscardableAttribute.cs
- PropertyMetadata.cs
- PolicyFactory.cs
- HttpProfileBase.cs
- ListViewSelectEventArgs.cs
- LineSegment.cs
- BitmapPalette.cs
- ConfigXmlElement.cs
- Double.cs
- DependencyPropertyDescriptor.cs
- ModelVisual3D.cs
- BitFlagsGenerator.cs
- ADConnectionHelper.cs
- SqlRecordBuffer.cs
- InvokeMethodActivityDesigner.cs
- AlternateViewCollection.cs