Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Condition.cs / 1305600 / Condition.cs
using MS.Utility;
using System.IO;
using System.Windows.Markup;
using System.ComponentModel;
using System;
using System.Windows.Data;
using System.Diagnostics;
using System.Globalization;
namespace System.Windows
{
///
/// Condition for a multiple property or data trigger
///
[XamlSetMarkupExtensionAttribute("ReceiveMarkupExtension")]
[XamlSetTypeConverterAttribute("ReceiveTypeConverter")]
public sealed class Condition : ISupportInitialize
{
///
/// Constructor with no property reference nor value
///
public Condition()
{
_property = null;
_binding = null;
}
///
/// Constructor for creating a Condition
///
public Condition( DependencyProperty conditionProperty, object conditionValue ) :
this(conditionProperty, conditionValue, null)
{
// Call Forwarded
}
///
/// Constructor for creating a Condition with the given property
/// and value instead of creating an empty one and setting values later.
///
///
/// This constructor does parameter validation, which before doesn't
/// happen until Seal() is called. We can do it here because we get
/// both at the same time.
///
public Condition( DependencyProperty conditionProperty, object conditionValue, string sourceName )
{
if( conditionProperty == null )
{
throw new ArgumentNullException("conditionProperty");
}
if( !conditionProperty.IsValidValue( conditionValue ) )
{
throw new ArgumentException(SR.Get(SRID.InvalidPropertyValue, conditionValue, conditionProperty.Name));
}
_property = conditionProperty;
Value = conditionValue;
_sourceName = sourceName;
}
///
/// Constructor for creating a Condition with the given binding declaration.
/// and value.
///
public Condition( BindingBase binding, object conditionValue )
{
if( binding == null )
{
throw new ArgumentNullException("binding");
}
Binding = binding;
Value = conditionValue;
}
///
/// DepedencyProperty of the conditional
///
[Ambient]
[DefaultValue(null)]
public DependencyProperty Property
{
get { return _property; }
set
{
if (_sealed)
{
throw new InvalidOperationException(SR.Get(SRID.CannotChangeAfterSealed, "Condition"));
}
if (_binding != null)
{
throw new InvalidOperationException(SR.Get(SRID.ConditionCannotUseBothPropertyAndBinding));
}
_property = value;
}
}
///
/// Binding of the conditional
///
[DefaultValue(null)]
public BindingBase Binding
{
get { return _binding; }
set
{
if (_sealed)
{
throw new InvalidOperationException(SR.Get(SRID.CannotChangeAfterSealed, "Condition"));
}
if( _property != null )
{
throw new InvalidOperationException(SR.Get(SRID.ConditionCannotUseBothPropertyAndBinding));
}
_binding = value;
}
}
///
/// Value of the condition (equality check)
///
[TypeConverter(typeof(System.Windows.Markup.SetterTriggerConditionValueConverter))]
public object Value
{
get { return _value; }
set
{
if (_sealed)
{
throw new InvalidOperationException(SR.Get(SRID.CannotChangeAfterSealed, "Condition"));
}
if (value is MarkupExtension)
{
throw new ArgumentException(SR.Get(SRID.ConditionValueOfMarkupExtensionNotSupported,
value.GetType().Name));
}
if( value is Expression )
{
throw new ArgumentException(SR.Get(SRID.ConditionValueOfExpressionNotSupported));
}
_value = value;
}
}
///
/// The x:Name of the object whose property shall
/// trigger the associated setters to be applied.
/// If null, then this is the object being Styled
/// and not anything under its Template Tree.
///
[DefaultValue(null)]
public string SourceName
{
get
{
return _sourceName;
}
set
{
if( _sealed )
{
throw new InvalidOperationException(SR.Get(SRID.CannotChangeAfterSealed, "Condition"));
}
_sourceName = value;
}
}
///
/// Seal the condition so that it can no longer be modified
///
internal void Seal(ValueLookupType type)
{
if (_sealed)
{
return;
}
_sealed = true;
// Ensure valid condition
if (_property != null && _binding != null)
throw new InvalidOperationException(SR.Get(SRID.ConditionCannotUseBothPropertyAndBinding));
switch (type)
{
case ValueLookupType.Trigger:
case ValueLookupType.PropertyTriggerResource:
if (_property == null)
{
throw new InvalidOperationException(SR.Get(SRID.NullPropertyIllegal, "Property"));
}
if (!_property.IsValidValue(_value))
{
throw new InvalidOperationException(SR.Get(SRID.InvalidPropertyValue, _value, _property.Name));
}
break;
case ValueLookupType.DataTrigger:
case ValueLookupType.DataTriggerResource:
if (_binding == null)
{
throw new InvalidOperationException(SR.Get(SRID.NullPropertyIllegal, "Binding"));
}
break;
default:
throw new InvalidOperationException(SR.Get(SRID.UnexpectedValueTypeForCondition, type));
}
// Freeze the condition value
StyleHelper.SealIfSealable(_value);
}
#region ISupportInitialize Members
void ISupportInitialize.BeginInit()
{
}
void ISupportInitialize.EndInit()
{
// Resolve all properties here
if (_unresolvedProperty != null)
{
try
{
Property = DependencyPropertyConverter.ResolveProperty(_serviceProvider,
SourceName, _unresolvedProperty);
}
finally
{
_unresolvedProperty = null;
}
}
if (_unresolvedValue != null)
{
try
{
Value = SetterTriggerConditionValueConverter.ResolveValue(_serviceProvider,
Property, _cultureInfoForTypeConverter, _unresolvedValue);
}
finally
{
_unresolvedValue = null;
}
}
_serviceProvider = null;
_cultureInfoForTypeConverter = null;
}
#endregion
public static void ReceiveMarkupExtension(object targetObject, XamlSetMarkupExtensionEventArgs eventArgs)
{
if (targetObject == null)
{
throw new ArgumentNullException("targetObject");
}
if (eventArgs == null)
{
throw new ArgumentNullException("eventArgs");
}
Condition condition = targetObject as Condition;
if (condition != null && eventArgs.Member.Name == "Binding" && eventArgs.MarkupExtension is BindingBase)
{
condition.Binding = eventArgs.MarkupExtension as BindingBase;
eventArgs.Handled = true;
}
}
public static void ReceiveTypeConverter(object targetObject, XamlSetTypeConverterEventArgs eventArgs)
{
Condition condition = targetObject as Condition;
if (condition == null)
{
throw new ArgumentNullException("targetObject");
}
if (eventArgs == null)
{
throw new ArgumentNullException("eventArgs");
}
if (eventArgs.Member.Name == "Property")
{
condition._unresolvedProperty = eventArgs.Value;
condition._serviceProvider = eventArgs.ServiceProvider;
condition._cultureInfoForTypeConverter = eventArgs.CultureInfo;
eventArgs.Handled = true;
}
else if (eventArgs.Member.Name == "Value")
{
condition._unresolvedValue = eventArgs.Value;
condition._serviceProvider = eventArgs.ServiceProvider;
condition._cultureInfoForTypeConverter = eventArgs.CultureInfo;
eventArgs.Handled = true;
}
}
private bool _sealed = false;
private DependencyProperty _property;
private BindingBase _binding;
private object _value = DependencyProperty.UnsetValue;
private string _sourceName = 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
- IncrementalCompileAnalyzer.cs
- DesignerLoader.cs
- CompiledQueryCacheEntry.cs
- SqlClientWrapperSmiStream.cs
- HMACSHA256.cs
- EventLogPermission.cs
- XmlSchemaSimpleContent.cs
- EditorPartChrome.cs
- HtmlGenericControl.cs
- CriticalExceptions.cs
- SoapTransportImporter.cs
- ExtensionWindow.cs
- DefinitionBase.cs
- DocumentReference.cs
- StopRoutingHandler.cs
- ResourcesBuildProvider.cs
- DataRowExtensions.cs
- RuleRefElement.cs
- Certificate.cs
- XsdCachingReader.cs
- RevocationPoint.cs
- CopyOnWriteList.cs
- SafeFileMapViewHandle.cs
- SqlCacheDependencyDatabase.cs
- ReadOnlyNameValueCollection.cs
- ScrollableControl.cs
- CookieProtection.cs
- SizeF.cs
- KeyValueSerializer.cs
- Decimal.cs
- WriteLineDesigner.xaml.cs
- PerformanceCounterPermissionEntryCollection.cs
- HtmlLink.cs
- StorageTypeMapping.cs
- HtmlEmptyTagControlBuilder.cs
- DataBindingExpressionBuilder.cs
- CompositeActivityValidator.cs
- MonthChangedEventArgs.cs
- ForwardPositionQuery.cs
- IisTraceListener.cs
- ThreadNeutralSemaphore.cs
- ListControlDataBindingHandler.cs
- CommandID.cs
- ASCIIEncoding.cs
- ImageClickEventArgs.cs
- ContentFileHelper.cs
- WebPartUtil.cs
- SqlGatherConsumedAliases.cs
- NameSpaceExtractor.cs
- MessageQueuePermissionEntry.cs
- MatrixAnimationBase.cs
- SafeFindHandle.cs
- WindowsListView.cs
- Compilation.cs
- Math.cs
- ConfigXmlElement.cs
- SortedDictionary.cs
- EdmSchemaError.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- EntryPointNotFoundException.cs
- SqlCacheDependencyDatabaseCollection.cs
- X509ThumbprintKeyIdentifierClause.cs
- SchemaSetCompiler.cs
- Solver.cs
- DataGridTableCollection.cs
- Validator.cs
- DataGridAutoFormatDialog.cs
- AnnotationObservableCollection.cs
- KerberosReceiverSecurityToken.cs
- DataSourceXmlClassAttribute.cs
- ValueUtilsSmi.cs
- CorePropertiesFilter.cs
- LinqDataSourceDeleteEventArgs.cs
- HtmlUtf8RawTextWriter.cs
- MatrixCamera.cs
- AppDomainProtocolHandler.cs
- CaretElement.cs
- RectangleHotSpot.cs
- MenuItemStyleCollection.cs
- TextElementEnumerator.cs
- DesigntimeLicenseContextSerializer.cs
- EdmValidator.cs
- ConfigurationValidatorAttribute.cs
- StylusPointProperties.cs
- ConfigurationSectionGroup.cs
- XPathNavigatorKeyComparer.cs
- SerialPinChanges.cs
- EntityDataSourceChangingEventArgs.cs
- EncoderParameters.cs
- PtsPage.cs
- ReverseInheritProperty.cs
- MemoryRecordBuffer.cs
- DBPropSet.cs
- InvokeMethodActivityDesigner.cs
- ContentElementCollection.cs
- GeometryModel3D.cs
- Ref.cs
- CopyCodeAction.cs
- TemplatedMailWebEventProvider.cs
- SoapAttributeOverrides.cs