Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Setter.cs / 1305600 / Setter.cs
/****************************************************************************\
*
* File: Setter.cs
*
* TargetType property setting class.
*
* Copyright (C) 2004 by Microsoft Corporation. All rights reserved.
*
\***************************************************************************/
using System;
using System.ComponentModel;
using System.Windows.Markup;
using System.Windows.Data;
using System.Globalization;
#pragma warning disable 1634, 1691 // suppressing PreSharp warnings
namespace System.Windows
{
///
/// TargetType property setting class.
///
[XamlSetMarkupExtensionAttribute("ReceiveMarkupExtension")]
[XamlSetTypeConverterAttribute("ReceiveTypeConverter")]
public class Setter : SetterBase, ISupportInitialize
{
///
/// Property Setter construction - set everything to null or DependencyProperty.UnsetValue
///
public Setter()
{
}
///
/// Property Setter construction - given property and value
///
public Setter( DependencyProperty property, object value )
{
Initialize( property, value, null );
}
///
/// Property Setter construction - given property, value, and string identifier for child node.
///
public Setter( DependencyProperty property, object value, string targetName )
{
Initialize( property, value, targetName );
}
///
/// Method that does all the initialization work for the constructors.
///
private void Initialize( DependencyProperty property, object value, string target )
{
if( value == DependencyProperty.UnsetValue )
{
throw new ArgumentException(SR.Get(SRID.SetterValueCannotBeUnset));
}
CheckValidProperty(property);
// No null check for target since null is a valid value.
_property = property;
_value = value;
_target = target;
}
private void CheckValidProperty( DependencyProperty property)
{
if (property == null)
{
throw new ArgumentNullException("property");
}
if (property.ReadOnly)
{
// Read-only properties will not be consulting Style/Template/Trigger Setter for value.
// Rather than silently do nothing, throw error.
throw new ArgumentException(SR.Get(SRID.ReadOnlyPropertyNotAllowed, property.Name, GetType().Name));
}
if( property == FrameworkElement.NameProperty)
{
throw new InvalidOperationException(SR.Get(SRID.CannotHavePropertyInStyle, FrameworkElement.NameProperty.Name));
}
}
///
/// Seals this setter
///
internal override void Seal()
{
// Do the validation that can't be done until we know all of the property
// values.
DependencyProperty dp = Property;
object value = ValueInternal;
if (dp == null)
{
throw new ArgumentException(SR.Get(SRID.NullPropertyIllegal, "Setter.Property"));
}
if( String.IsNullOrEmpty(TargetName))
{
// Setter on container is not allowed to affect the StyleProperty.
if (dp == FrameworkElement.StyleProperty)
{
throw new ArgumentException(SR.Get(SRID.StylePropertyInStyleNotAllowed));
}
}
// Value needs to be valid for the DP, or a deferred reference, or one of the supported
// markup extensions.
if (!dp.IsValidValue(value))
{
// The only markup extensions supported by styles is resources and bindings.
if (value is MarkupExtension)
{
if ( !(value is DynamicResourceExtension) && !(value is System.Windows.Data.BindingBase) )
{
throw new ArgumentException(SR.Get(SRID.SetterValueOfMarkupExtensionNotSupported,
value.GetType().Name));
}
}
else if (!(value is DeferredReference))
{
throw new ArgumentException(SR.Get(SRID.InvalidSetterValue, value, dp.OwnerType, dp.Name));
}
}
// Freeze the value for the setter
StyleHelper.SealIfSealable(_value);
base.Seal();
}
///
/// Property that is being set by this setter
///
[Ambient]
[DefaultValue(null)]
[Localizability(LocalizationCategory.None, Modifiability = Modifiability.Unmodifiable, Readability = Readability.Unreadable)] // Not localizable by-default
public DependencyProperty Property
{
get { return _property; }
set
{
CheckValidProperty(value);
CheckSealed();
_property = value;
}
}
///
/// Property value that is being set by this setter
///
[System.Windows.Markup.DependsOn("Property")]
[System.Windows.Markup.DependsOn("TargetName")]
[Localizability(LocalizationCategory.None, Readability = Readability.Unreadable)] // Not localizable by-default
[TypeConverter(typeof(System.Windows.Markup.SetterTriggerConditionValueConverter))]
public object Value
{
get
{
// Inflate the deferred reference if the _value is one of those.
DeferredReference deferredReference = _value as DeferredReference;
if (deferredReference != null)
{
_value = deferredReference.GetValue(BaseValueSourceInternal.Unknown);
}
return _value;
}
set
{
if( value == DependencyProperty.UnsetValue )
{
throw new ArgumentException(SR.Get(SRID.SetterValueCannotBeUnset));
}
CheckSealed();
// No Expression support
if( value is Expression )
{
throw new ArgumentException(SR.Get(SRID.StyleValueOfExpressionNotSupported));
}
_value = value;
}
}
///
/// Internal property used so that we obtain the value as
/// is without having to inflate the DeferredReference.
///
internal object ValueInternal
{
get { return _value; }
}
///
/// When the set is directed at a child node, this string
/// identifies the intended target child node.
///
[DefaultValue(null)]
[Ambient]
public string TargetName
{
get
{
return _target;
}
set
{
// Setting to null is allowed, to clear out value.
CheckSealed();
_target = value;
}
}
public static void ReceiveMarkupExtension(object targetObject, XamlSetMarkupExtensionEventArgs eventArgs)
{
if (targetObject == null)
{
throw new ArgumentNullException("targetObject");
}
if (eventArgs == null)
{
throw new ArgumentNullException("eventArgs");
}
Setter setter = targetObject as Setter;
if (setter == null || eventArgs.Member.Name != "Value")
{
return;
}
MarkupExtension me = eventArgs.MarkupExtension;
if (me is StaticResourceExtension)
{
var sr = me as StaticResourceExtension;
setter.Value = sr.ProvideValueInternal(eventArgs.ServiceProvider, true /*allowDeferedReference*/);
eventArgs.Handled = true;
}
else if (me is DynamicResourceExtension || me is BindingBase)
{
setter.Value = me;
eventArgs.Handled = true;
}
}
public static void ReceiveTypeConverter(object targetObject, XamlSetTypeConverterEventArgs eventArgs)
{
Setter setter = targetObject as Setter;
if (setter == null)
{
throw new ArgumentNullException("targetObject");
}
if (eventArgs == null)
{
throw new ArgumentNullException("eventArgs");
}
if (eventArgs.Member.Name == "Property")
{
setter._unresolvedProperty = eventArgs.Value;
setter._serviceProvider = eventArgs.ServiceProvider;
setter._cultureInfoForTypeConverter = eventArgs.CultureInfo;
eventArgs.Handled = true;
}
else if (eventArgs.Member.Name == "Value")
{
setter._unresolvedValue = eventArgs.Value;
setter._serviceProvider = eventArgs.ServiceProvider;
setter._cultureInfoForTypeConverter = eventArgs.CultureInfo;
eventArgs.Handled = true;
}
}
#region ISupportInitialize Members
void ISupportInitialize.BeginInit()
{
}
void ISupportInitialize.EndInit()
{
// Resolve all properties here
if (_unresolvedProperty != null)
{
try
{
Property = DependencyPropertyConverter.ResolveProperty(_serviceProvider,
TargetName, _unresolvedProperty);
}
finally
{
_unresolvedProperty = null;
}
}
if (_unresolvedValue != null)
{
try
{
Value = SetterTriggerConditionValueConverter.ResolveValue(_serviceProvider,
Property, _cultureInfoForTypeConverter, _unresolvedValue);
}
finally
{
_unresolvedValue = null;
}
}
_serviceProvider = null;
_cultureInfoForTypeConverter = null;
}
#endregion
private DependencyProperty _property = null;
private object _value = DependencyProperty.UnsetValue;
private string _target = null;
private object _unresolvedProperty = null;
private object _unresolvedValue = null;
private ITypeDescriptorContext _serviceProvider = null;
private CultureInfo _cultureInfoForTypeConverter = null;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
/****************************************************************************\
*
* File: Setter.cs
*
* TargetType property setting class.
*
* Copyright (C) 2004 by Microsoft Corporation. All rights reserved.
*
\***************************************************************************/
using System;
using System.ComponentModel;
using System.Windows.Markup;
using System.Windows.Data;
using System.Globalization;
#pragma warning disable 1634, 1691 // suppressing PreSharp warnings
namespace System.Windows
{
///
/// TargetType property setting class.
///
[XamlSetMarkupExtensionAttribute("ReceiveMarkupExtension")]
[XamlSetTypeConverterAttribute("ReceiveTypeConverter")]
public class Setter : SetterBase, ISupportInitialize
{
///
/// Property Setter construction - set everything to null or DependencyProperty.UnsetValue
///
public Setter()
{
}
///
/// Property Setter construction - given property and value
///
public Setter( DependencyProperty property, object value )
{
Initialize( property, value, null );
}
///
/// Property Setter construction - given property, value, and string identifier for child node.
///
public Setter( DependencyProperty property, object value, string targetName )
{
Initialize( property, value, targetName );
}
///
/// Method that does all the initialization work for the constructors.
///
private void Initialize( DependencyProperty property, object value, string target )
{
if( value == DependencyProperty.UnsetValue )
{
throw new ArgumentException(SR.Get(SRID.SetterValueCannotBeUnset));
}
CheckValidProperty(property);
// No null check for target since null is a valid value.
_property = property;
_value = value;
_target = target;
}
private void CheckValidProperty( DependencyProperty property)
{
if (property == null)
{
throw new ArgumentNullException("property");
}
if (property.ReadOnly)
{
// Read-only properties will not be consulting Style/Template/Trigger Setter for value.
// Rather than silently do nothing, throw error.
throw new ArgumentException(SR.Get(SRID.ReadOnlyPropertyNotAllowed, property.Name, GetType().Name));
}
if( property == FrameworkElement.NameProperty)
{
throw new InvalidOperationException(SR.Get(SRID.CannotHavePropertyInStyle, FrameworkElement.NameProperty.Name));
}
}
///
/// Seals this setter
///
internal override void Seal()
{
// Do the validation that can't be done until we know all of the property
// values.
DependencyProperty dp = Property;
object value = ValueInternal;
if (dp == null)
{
throw new ArgumentException(SR.Get(SRID.NullPropertyIllegal, "Setter.Property"));
}
if( String.IsNullOrEmpty(TargetName))
{
// Setter on container is not allowed to affect the StyleProperty.
if (dp == FrameworkElement.StyleProperty)
{
throw new ArgumentException(SR.Get(SRID.StylePropertyInStyleNotAllowed));
}
}
// Value needs to be valid for the DP, or a deferred reference, or one of the supported
// markup extensions.
if (!dp.IsValidValue(value))
{
// The only markup extensions supported by styles is resources and bindings.
if (value is MarkupExtension)
{
if ( !(value is DynamicResourceExtension) && !(value is System.Windows.Data.BindingBase) )
{
throw new ArgumentException(SR.Get(SRID.SetterValueOfMarkupExtensionNotSupported,
value.GetType().Name));
}
}
else if (!(value is DeferredReference))
{
throw new ArgumentException(SR.Get(SRID.InvalidSetterValue, value, dp.OwnerType, dp.Name));
}
}
// Freeze the value for the setter
StyleHelper.SealIfSealable(_value);
base.Seal();
}
///
/// Property that is being set by this setter
///
[Ambient]
[DefaultValue(null)]
[Localizability(LocalizationCategory.None, Modifiability = Modifiability.Unmodifiable, Readability = Readability.Unreadable)] // Not localizable by-default
public DependencyProperty Property
{
get { return _property; }
set
{
CheckValidProperty(value);
CheckSealed();
_property = value;
}
}
///
/// Property value that is being set by this setter
///
[System.Windows.Markup.DependsOn("Property")]
[System.Windows.Markup.DependsOn("TargetName")]
[Localizability(LocalizationCategory.None, Readability = Readability.Unreadable)] // Not localizable by-default
[TypeConverter(typeof(System.Windows.Markup.SetterTriggerConditionValueConverter))]
public object Value
{
get
{
// Inflate the deferred reference if the _value is one of those.
DeferredReference deferredReference = _value as DeferredReference;
if (deferredReference != null)
{
_value = deferredReference.GetValue(BaseValueSourceInternal.Unknown);
}
return _value;
}
set
{
if( value == DependencyProperty.UnsetValue )
{
throw new ArgumentException(SR.Get(SRID.SetterValueCannotBeUnset));
}
CheckSealed();
// No Expression support
if( value is Expression )
{
throw new ArgumentException(SR.Get(SRID.StyleValueOfExpressionNotSupported));
}
_value = value;
}
}
///
/// Internal property used so that we obtain the value as
/// is without having to inflate the DeferredReference.
///
internal object ValueInternal
{
get { return _value; }
}
///
/// When the set is directed at a child node, this string
/// identifies the intended target child node.
///
[DefaultValue(null)]
[Ambient]
public string TargetName
{
get
{
return _target;
}
set
{
// Setting to null is allowed, to clear out value.
CheckSealed();
_target = value;
}
}
public static void ReceiveMarkupExtension(object targetObject, XamlSetMarkupExtensionEventArgs eventArgs)
{
if (targetObject == null)
{
throw new ArgumentNullException("targetObject");
}
if (eventArgs == null)
{
throw new ArgumentNullException("eventArgs");
}
Setter setter = targetObject as Setter;
if (setter == null || eventArgs.Member.Name != "Value")
{
return;
}
MarkupExtension me = eventArgs.MarkupExtension;
if (me is StaticResourceExtension)
{
var sr = me as StaticResourceExtension;
setter.Value = sr.ProvideValueInternal(eventArgs.ServiceProvider, true /*allowDeferedReference*/);
eventArgs.Handled = true;
}
else if (me is DynamicResourceExtension || me is BindingBase)
{
setter.Value = me;
eventArgs.Handled = true;
}
}
public static void ReceiveTypeConverter(object targetObject, XamlSetTypeConverterEventArgs eventArgs)
{
Setter setter = targetObject as Setter;
if (setter == null)
{
throw new ArgumentNullException("targetObject");
}
if (eventArgs == null)
{
throw new ArgumentNullException("eventArgs");
}
if (eventArgs.Member.Name == "Property")
{
setter._unresolvedProperty = eventArgs.Value;
setter._serviceProvider = eventArgs.ServiceProvider;
setter._cultureInfoForTypeConverter = eventArgs.CultureInfo;
eventArgs.Handled = true;
}
else if (eventArgs.Member.Name == "Value")
{
setter._unresolvedValue = eventArgs.Value;
setter._serviceProvider = eventArgs.ServiceProvider;
setter._cultureInfoForTypeConverter = eventArgs.CultureInfo;
eventArgs.Handled = true;
}
}
#region ISupportInitialize Members
void ISupportInitialize.BeginInit()
{
}
void ISupportInitialize.EndInit()
{
// Resolve all properties here
if (_unresolvedProperty != null)
{
try
{
Property = DependencyPropertyConverter.ResolveProperty(_serviceProvider,
TargetName, _unresolvedProperty);
}
finally
{
_unresolvedProperty = null;
}
}
if (_unresolvedValue != null)
{
try
{
Value = SetterTriggerConditionValueConverter.ResolveValue(_serviceProvider,
Property, _cultureInfoForTypeConverter, _unresolvedValue);
}
finally
{
_unresolvedValue = null;
}
}
_serviceProvider = null;
_cultureInfoForTypeConverter = null;
}
#endregion
private DependencyProperty _property = null;
private object _value = DependencyProperty.UnsetValue;
private string _target = null;
private object _unresolvedProperty = null;
private object _unresolvedValue = null;
private ITypeDescriptorContext _serviceProvider = null;
private CultureInfo _cultureInfoForTypeConverter = null;
}
}
// 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
- PackagingUtilities.cs
- PeerTransportElement.cs
- SqlReferenceCollection.cs
- HierarchicalDataSourceConverter.cs
- ArgumentException.cs
- diagnosticsswitches.cs
- XmlAttributeOverrides.cs
- TaiwanLunisolarCalendar.cs
- ElapsedEventArgs.cs
- FieldAccessException.cs
- SafeArrayTypeMismatchException.cs
- LiteralControl.cs
- PolyBezierSegment.cs
- Matrix3DStack.cs
- UInt16.cs
- Completion.cs
- ErrorWrapper.cs
- DateTimeSerializationSection.cs
- DefaultAuthorizationContext.cs
- SymbolEqualComparer.cs
- GPStream.cs
- DictionaryEntry.cs
- SoapElementAttribute.cs
- XmlImplementation.cs
- NegatedCellConstant.cs
- IntegerFacetDescriptionElement.cs
- WmpBitmapDecoder.cs
- ErrorTableItemStyle.cs
- XmlNodeList.cs
- TextStore.cs
- CharAnimationUsingKeyFrames.cs
- RemoteTokenFactory.cs
- IdnElement.cs
- SessionStateSection.cs
- WebPartCloseVerb.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- IDReferencePropertyAttribute.cs
- CommentEmitter.cs
- XmlSchemaSimpleTypeList.cs
- WebPartConnectionsCancelVerb.cs
- StateBag.cs
- SafeRightsManagementPubHandle.cs
- Int64Storage.cs
- ColumnMapCopier.cs
- CodeParameterDeclarationExpression.cs
- BatchServiceHost.cs
- UnmanagedMemoryStream.cs
- HttpWebRequestElement.cs
- ContentPathSegment.cs
- ServerReliableChannelBinder.cs
- TimerElapsedEvenArgs.cs
- XPathExpr.cs
- TypeRefElement.cs
- SynchronizingStream.cs
- WbemProvider.cs
- XamlBrushSerializer.cs
- SwitchLevelAttribute.cs
- OnOperation.cs
- TransformedBitmap.cs
- EventsTab.cs
- ProcessModelInfo.cs
- _CacheStreams.cs
- ClientSponsor.cs
- Brushes.cs
- MoveSizeWinEventHandler.cs
- ProxyHwnd.cs
- PerspectiveCamera.cs
- ThousandthOfEmRealPoints.cs
- QueryNode.cs
- ExpressionParser.cs
- FullTextState.cs
- RefType.cs
- Transform3D.cs
- SafeLibraryHandle.cs
- SchemaNamespaceManager.cs
- GridLength.cs
- FixedPage.cs
- VisualStyleTypesAndProperties.cs
- BinaryObjectWriter.cs
- ResourceManager.cs
- DispatchChannelSink.cs
- BooleanConverter.cs
- GridViewAutoFormat.cs
- BypassElementCollection.cs
- CryptoProvider.cs
- XAMLParseException.cs
- TextDocumentView.cs
- ProcessProtocolHandler.cs
- LiteralControl.cs
- AncestorChangedEventArgs.cs
- WorkItem.cs
- IgnoreSectionHandler.cs
- WinCategoryAttribute.cs
- ScrollBar.cs
- CompressEmulationStream.cs
- DataViewListener.cs
- DbTransaction.cs
- PageStatePersister.cs
- ReliableSessionElement.cs
- SimpleFieldTemplateUserControl.cs