Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Framework / MS / Internal / Ink / StrokeCollectionDefaultValueFactory.cs / 1 / StrokeCollectionDefaultValueFactory.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description: DefaultValueFactory for StrokeCollection
//
// History:
// 2006/01/24 : waynezen - Created
//
//---------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Ink;
namespace MS.Internal.Ink
{
internal class StrokeCollectionDefaultValueFactory : DefaultValueFactory
{
internal StrokeCollectionDefaultValueFactory()
{
}
///
/// Returns an "immutable" default value. Since we can't make the default value
/// read only we'll return a new one every time.
///
internal override object DefaultValue
{
get
{
return new StrokeCollection();
}
}
///
/// Creates a mutable default value
///
internal override object CreateDefaultValue(DependencyObject owner, DependencyProperty property)
{
Debug.Assert(property.PropertyType == typeof(StrokeCollection),
string.Format(System.Globalization.CultureInfo.InvariantCulture, "The DependencyProperty {0} has to be type of StrokeCollection.", property));
// Instantiate our default value instance.
StrokeCollection defaultValue = new StrokeCollection();
// Add event handlers for tracking the changes on the default value instance.
StrokeCollectionDefaultPromoter promoter = new StrokeCollectionDefaultPromoter(owner, property);
defaultValue.StrokesChanged +=
new StrokeCollectionChangedEventHandler(promoter.OnStrokeCollectionChanged);
defaultValue.PropertyDataChanged +=
new PropertyDataChangedEventHandler(promoter.OnStrokeCollectionChanged);
return defaultValue;
}
///
/// A tracking class which monitors any changes on StrokeCollection
///
private class StrokeCollectionDefaultPromoter
{
///
/// Constructor
///
///
///
internal StrokeCollectionDefaultPromoter(DependencyObject owner, DependencyProperty property)
{
_owner = owner;
_dependencyProperty = property;
}
///
/// A handler for both AttributeChanged and PropertyDataChanged.
///
///
///
internal void OnStrokeCollectionChanged(object sender, TEventArgs e)
{
StrokeCollection value = (StrokeCollection)sender;
// The current instance will be promoted to the local value other than the default value.
// Then we could just remove our handlers to stop tracking.
value.StrokesChanged -=
new StrokeCollectionChangedEventHandler(OnStrokeCollectionChanged);
value.PropertyDataChanged -=
new PropertyDataChangedEventHandler(OnStrokeCollectionChanged);
// NTRAID#WINDOWS-1334059-2005/10/17-waynezen,
// We only promote the value when there is no local value set yet.
if ( _owner.ReadLocalValue(_dependencyProperty) == DependencyProperty.UnsetValue )
{
// Promote the instance to the local value.
_owner.SetValue(_dependencyProperty, value);
}
// Remove this value from the DefaultValue cache so we stop
// handing it out as the default value now that it has changed.
PropertyMetadata metadata = _dependencyProperty.GetMetadata(_owner.DependencyObjectType);
metadata.ClearCachedDefaultValue(_owner, _dependencyProperty);
}
private readonly DependencyObject _owner;
private readonly DependencyProperty _dependencyProperty;
}
}
}
// 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.
//
//
// Description: DefaultValueFactory for StrokeCollection
//
// History:
// 2006/01/24 : waynezen - Created
//
//---------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Ink;
namespace MS.Internal.Ink
{
internal class StrokeCollectionDefaultValueFactory : DefaultValueFactory
{
internal StrokeCollectionDefaultValueFactory()
{
}
///
/// Returns an "immutable" default value. Since we can't make the default value
/// read only we'll return a new one every time.
///
internal override object DefaultValue
{
get
{
return new StrokeCollection();
}
}
///
/// Creates a mutable default value
///
internal override object CreateDefaultValue(DependencyObject owner, DependencyProperty property)
{
Debug.Assert(property.PropertyType == typeof(StrokeCollection),
string.Format(System.Globalization.CultureInfo.InvariantCulture, "The DependencyProperty {0} has to be type of StrokeCollection.", property));
// Instantiate our default value instance.
StrokeCollection defaultValue = new StrokeCollection();
// Add event handlers for tracking the changes on the default value instance.
StrokeCollectionDefaultPromoter promoter = new StrokeCollectionDefaultPromoter(owner, property);
defaultValue.StrokesChanged +=
new StrokeCollectionChangedEventHandler(promoter.OnStrokeCollectionChanged);
defaultValue.PropertyDataChanged +=
new PropertyDataChangedEventHandler(promoter.OnStrokeCollectionChanged);
return defaultValue;
}
///
/// A tracking class which monitors any changes on StrokeCollection
///
private class StrokeCollectionDefaultPromoter
{
///
/// Constructor
///
///
///
internal StrokeCollectionDefaultPromoter(DependencyObject owner, DependencyProperty property)
{
_owner = owner;
_dependencyProperty = property;
}
///
/// A handler for both AttributeChanged and PropertyDataChanged.
///
///
///
internal void OnStrokeCollectionChanged(object sender, TEventArgs e)
{
StrokeCollection value = (StrokeCollection)sender;
// The current instance will be promoted to the local value other than the default value.
// Then we could just remove our handlers to stop tracking.
value.StrokesChanged -=
new StrokeCollectionChangedEventHandler(OnStrokeCollectionChanged);
value.PropertyDataChanged -=
new PropertyDataChangedEventHandler(OnStrokeCollectionChanged);
// NTRAID#WINDOWS-1334059-2005/10/17-waynezen,
// We only promote the value when there is no local value set yet.
if ( _owner.ReadLocalValue(_dependencyProperty) == DependencyProperty.UnsetValue )
{
// Promote the instance to the local value.
_owner.SetValue(_dependencyProperty, value);
}
// Remove this value from the DefaultValue cache so we stop
// handing it out as the default value now that it has changed.
PropertyMetadata metadata = _dependencyProperty.GetMetadata(_owner.DependencyObjectType);
metadata.ClearCachedDefaultValue(_owner, _dependencyProperty);
}
private readonly DependencyObject _owner;
private readonly DependencyProperty _dependencyProperty;
}
}
}
// 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
- HttpSysSettings.cs
- GetChildSubtree.cs
- RequestQueryProcessor.cs
- RemotingSurrogateSelector.cs
- EncryptedPackageFilter.cs
- Debugger.cs
- TemplateControl.cs
- PropVariant.cs
- OdbcUtils.cs
- XslTransform.cs
- StorageConditionPropertyMapping.cs
- AmbientEnvironment.cs
- TextRunCacheImp.cs
- DependencySource.cs
- Variable.cs
- _DigestClient.cs
- ErrorItem.cs
- HttpPostedFile.cs
- StateFinalizationDesigner.cs
- SizeValueSerializer.cs
- OleDbException.cs
- Region.cs
- TreeNode.cs
- ToolboxComponentsCreatedEventArgs.cs
- ConstructorBuilder.cs
- GridViewDeletedEventArgs.cs
- SequenceNumber.cs
- ExpressionBuilderContext.cs
- RijndaelManaged.cs
- ValidateNames.cs
- RowsCopiedEventArgs.cs
- GlobalEventManager.cs
- KerberosTokenFactoryCredential.cs
- XmlIgnoreAttribute.cs
- InkCanvasFeedbackAdorner.cs
- DoubleLinkList.cs
- GridItemCollection.cs
- EndpointAddress.cs
- DocumentOrderComparer.cs
- DataServiceHostWrapper.cs
- PerformanceCounter.cs
- DataContractAttribute.cs
- XmlSchemaType.cs
- BidOverLoads.cs
- XmlSerializerFactory.cs
- DebugView.cs
- StoreConnection.cs
- Command.cs
- ToolstripProfessionalRenderer.cs
- GroupBox.cs
- RuleProcessor.cs
- GlyphsSerializer.cs
- TemplatePartAttribute.cs
- GcSettings.cs
- WindowsGraphicsWrapper.cs
- DeflateEmulationStream.cs
- TargetConverter.cs
- DriveInfo.cs
- MethodExpr.cs
- TextDpi.cs
- DataControlImageButton.cs
- SeparatorAutomationPeer.cs
- DataGridColumn.cs
- sortedlist.cs
- OlePropertyStructs.cs
- BinaryObjectReader.cs
- WasAdminWrapper.cs
- TraceSection.cs
- FrameworkTemplate.cs
- SendingRequestEventArgs.cs
- WebPartEditorApplyVerb.cs
- ServiceHttpModule.cs
- InkCanvasAutomationPeer.cs
- METAHEADER.cs
- safelink.cs
- BamlVersionHeader.cs
- TabPageDesigner.cs
- OleDbStruct.cs
- GroupQuery.cs
- FieldBuilder.cs
- SecurityPolicySection.cs
- XmlIgnoreAttribute.cs
- MachineSettingsSection.cs
- EdmProviderManifest.cs
- XmlSchemaComplexContentRestriction.cs
- Model3DCollection.cs
- HttpClientCertificate.cs
- httpapplicationstate.cs
- Visual3DCollection.cs
- DbProviderConfigurationHandler.cs
- NotifyInputEventArgs.cs
- ExtensionDataReader.cs
- NumberFormatInfo.cs
- DataRecordInternal.cs
- ActiveXHelper.cs
- ObjectItemCollectionAssemblyCacheEntry.cs
- DbQueryCommandTree.cs
- LicenseException.cs
- PanelDesigner.cs
- AsymmetricSignatureFormatter.cs