Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Ink / DrawingAttributesDefaultValueFactory.cs / 1305600 / DrawingAttributesDefaultValueFactory.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description: DefaultValueFactory for DrawingAttributes
//
// History:
// 2005/11/08 : [....] - Created
//
//---------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Ink;
namespace MS.Internal.Ink
{
internal class DrawingAttributesDefaultValueFactory : DefaultValueFactory
{
internal DrawingAttributesDefaultValueFactory()
{
}
///
/// 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 DrawingAttributes();
}
}
///
/// Creates a mutable default value
///
internal override object CreateDefaultValue(DependencyObject owner, DependencyProperty property)
{
// Instantiate our default value instance.
DrawingAttributes defaultValue = new DrawingAttributes();
// Add event handlers for tracking the changes on the default value instance.
DrawingAttributesDefaultPromoter promoter = new DrawingAttributesDefaultPromoter((InkCanvas)owner);
defaultValue.AttributeChanged += new PropertyDataChangedEventHandler(promoter.OnDrawingAttributesChanged);
defaultValue.PropertyDataChanged += new PropertyDataChangedEventHandler(promoter.OnDrawingAttributesChanged);
return defaultValue;
}
///
/// A tracking class which monitors the sub-property changes on DrawingAttributes
///
private class DrawingAttributesDefaultPromoter
{
///
/// Constructor
///
///
internal DrawingAttributesDefaultPromoter(InkCanvas owner)
{
_owner = owner;
}
///
/// A handler for both AttributeChanged and PropertyDataChanged.
///
///
///
internal void OnDrawingAttributesChanged(object sender, PropertyDataChangedEventArgs e)
{
DrawingAttributes value = (DrawingAttributes)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.AttributeChanged -= new PropertyDataChangedEventHandler(OnDrawingAttributesChanged);
value.PropertyDataChanged -= new PropertyDataChangedEventHandler(OnDrawingAttributesChanged);
// NTRAID#WINDOWS-1334059-2005/10/17-waynezen,
// We only promote the value when there is no local value set yet.
if (_owner.ReadLocalValue(InkCanvas.DefaultDrawingAttributesProperty) == DependencyProperty.UnsetValue)
{
// Promote the instance to the local value.
_owner.SetValue(InkCanvas.DefaultDrawingAttributesProperty, 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 = InkCanvas.DefaultDrawingAttributesProperty.GetMetadata(_owner.DependencyObjectType);
metadata.ClearCachedDefaultValue(_owner, InkCanvas.DefaultDrawingAttributesProperty);
}
private readonly InkCanvas _owner;
}
}
}
// 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 DrawingAttributes
//
// History:
// 2005/11/08 : [....] - Created
//
//---------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Ink;
namespace MS.Internal.Ink
{
internal class DrawingAttributesDefaultValueFactory : DefaultValueFactory
{
internal DrawingAttributesDefaultValueFactory()
{
}
///
/// 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 DrawingAttributes();
}
}
///
/// Creates a mutable default value
///
internal override object CreateDefaultValue(DependencyObject owner, DependencyProperty property)
{
// Instantiate our default value instance.
DrawingAttributes defaultValue = new DrawingAttributes();
// Add event handlers for tracking the changes on the default value instance.
DrawingAttributesDefaultPromoter promoter = new DrawingAttributesDefaultPromoter((InkCanvas)owner);
defaultValue.AttributeChanged += new PropertyDataChangedEventHandler(promoter.OnDrawingAttributesChanged);
defaultValue.PropertyDataChanged += new PropertyDataChangedEventHandler(promoter.OnDrawingAttributesChanged);
return defaultValue;
}
///
/// A tracking class which monitors the sub-property changes on DrawingAttributes
///
private class DrawingAttributesDefaultPromoter
{
///
/// Constructor
///
///
internal DrawingAttributesDefaultPromoter(InkCanvas owner)
{
_owner = owner;
}
///
/// A handler for both AttributeChanged and PropertyDataChanged.
///
///
///
internal void OnDrawingAttributesChanged(object sender, PropertyDataChangedEventArgs e)
{
DrawingAttributes value = (DrawingAttributes)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.AttributeChanged -= new PropertyDataChangedEventHandler(OnDrawingAttributesChanged);
value.PropertyDataChanged -= new PropertyDataChangedEventHandler(OnDrawingAttributesChanged);
// NTRAID#WINDOWS-1334059-2005/10/17-waynezen,
// We only promote the value when there is no local value set yet.
if (_owner.ReadLocalValue(InkCanvas.DefaultDrawingAttributesProperty) == DependencyProperty.UnsetValue)
{
// Promote the instance to the local value.
_owner.SetValue(InkCanvas.DefaultDrawingAttributesProperty, 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 = InkCanvas.DefaultDrawingAttributesProperty.GetMetadata(_owner.DependencyObjectType);
metadata.ClearCachedDefaultValue(_owner, InkCanvas.DefaultDrawingAttributesProperty);
}
private readonly InkCanvas _owner;
}
}
}
// 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
- AutoGeneratedField.cs
- XmlIlTypeHelper.cs
- regiisutil.cs
- ConsoleCancelEventArgs.cs
- PageSetupDialog.cs
- PathGeometry.cs
- EntityDataSourceWrapperCollection.cs
- Invariant.cs
- StringReader.cs
- BooleanSwitch.cs
- NullExtension.cs
- RenamedEventArgs.cs
- ServerIdentity.cs
- DrawingContextWalker.cs
- DeclarativeCatalogPartDesigner.cs
- BaseCollection.cs
- PropertyGridEditorPart.cs
- ToolStripButton.cs
- TextContainer.cs
- BufferBuilder.cs
- DataGridDesigner.cs
- HTMLTextWriter.cs
- SessionIDManager.cs
- DataSvcMapFile.cs
- ZipIOBlockManager.cs
- ConnectionConsumerAttribute.cs
- ProviderException.cs
- ChildrenQuery.cs
- AQNBuilder.cs
- ChtmlMobileTextWriter.cs
- Compiler.cs
- ActivityBindForm.Designer.cs
- FormViewInsertedEventArgs.cs
- IgnoreSectionHandler.cs
- TreeViewBindingsEditorForm.cs
- SafeFileMappingHandle.cs
- Attributes.cs
- PrePrepareMethodAttribute.cs
- Mapping.cs
- LightweightCodeGenerator.cs
- SuppressMessageAttribute.cs
- ProxyFragment.cs
- StringExpressionSet.cs
- PopOutPanel.cs
- FloaterParagraph.cs
- ZipFileInfoCollection.cs
- CssTextWriter.cs
- CharStorage.cs
- HttpFileCollection.cs
- LinkUtilities.cs
- SHA384.cs
- TextBounds.cs
- DataGridItemCollection.cs
- TreeNodeEventArgs.cs
- RepeaterItemEventArgs.cs
- SemanticResultValue.cs
- EntityUtil.cs
- AnalyzedTree.cs
- DesignColumnCollection.cs
- VisualStyleTypesAndProperties.cs
- AutoResizedEvent.cs
- RouteCollection.cs
- PageHandlerFactory.cs
- ControlType.cs
- IISMapPath.cs
- QueryOperator.cs
- SubqueryTrackingVisitor.cs
- IsolatedStoragePermission.cs
- DragDeltaEventArgs.cs
- PrinterSettings.cs
- UIHelper.cs
- LabelEditEvent.cs
- SmtpMail.cs
- InlineObject.cs
- AppDomainEvidenceFactory.cs
- AsyncCallback.cs
- StateMachine.cs
- DetailsViewRowCollection.cs
- Ticks.cs
- SrgsItemList.cs
- OptionalRstParameters.cs
- TreeNodeBindingCollection.cs
- EntityClientCacheEntry.cs
- SqlDataSourceCommandEventArgs.cs
- TextRangeProviderWrapper.cs
- StylusSystemGestureEventArgs.cs
- KoreanLunisolarCalendar.cs
- ReadingWritingEntityEventArgs.cs
- SortDescription.cs
- ListMarkerLine.cs
- AccessControlEntry.cs
- XmlSchemaComplexType.cs
- ParseChildrenAsPropertiesAttribute.cs
- DragDeltaEventArgs.cs
- XPathDescendantIterator.cs
- DesignerActionPanel.cs
- EventBuilder.cs
- XPathConvert.cs
- URI.cs
- DataColumn.cs