Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / MultiDataTrigger.cs / 1 / MultiDataTrigger.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description: Defines MultiDataTrigger object, akin to MultiTrigger except it
// gets values from data.
//
//---------------------------------------------------------------------------
using MS.Utility;
using System;
using System.Diagnostics;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Windows.Data;
using System.Windows.Markup;
namespace System.Windows
{
///
/// A multiple Style data conditional dependency driver
///
[ContentProperty("Setters")]
public sealed class MultiDataTrigger : TriggerBase, IAddChild
{
///
/// Conditions collection
///
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ConditionCollection Conditions
{
get
{
// Verify Context Access
VerifyAccess();
return _conditions;
}
}
///
/// Collection of Setter objects, which describes what to apply
/// when this trigger is active.
///
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public SetterBaseCollection Setters
{
get
{
// Verify Context Access
VerifyAccess();
if( _setters == null )
{
_setters = new SetterBaseCollection();
}
return _setters;
}
}
///
/// This method is called to Add a Setter object as a child of the Style.
///
///
/// The object to add as a child; it must be a Setter or subclass.
///
void IAddChild.AddChild (Object value)
{
// Verify Context Access
VerifyAccess();
Setters.Add(Trigger.CheckChildIsSetter(value));
}
///
/// This method is called by the parser when text appears under the tag in markup.
/// As default Styles do not support text, calling this method has no effect.
///
///
/// Text to add as a child.
///
void IAddChild.AddText (string text)
{
// Verify Context Access
VerifyAccess();
XamlSerializerUtil.ThrowIfNonWhiteSpaceInAddText(text, this);
}
internal override void Seal()
{
if (IsSealed)
{
return;
}
// Process the _setters collection: Copy values into PropertyValueList and seal the Setter objects.
ProcessSettersCollection(_setters);
if (_conditions.Count > 0)
{
// Seal conditions
_conditions.Seal(ValueLookupType.DataTrigger);
}
// Build conditions array from collection
TriggerConditions = new TriggerCondition[_conditions.Count];
for (int i = 0; i < TriggerConditions.Length; ++i)
{
if (_conditions[i].SourceName != null && _conditions[i].SourceName.Length > 0)
{
throw new InvalidOperationException(SR.Get(SRID.SourceNameNotSupportedForDataTriggers));
}
TriggerConditions[i] = new TriggerCondition(
_conditions[i].Binding,
LogicalOp.Equals,
_conditions[i].Value);
}
// Set conditions array for all property triggers
for (int i = 0; i < PropertyValues.Count; ++i)
{
PropertyValue propertyValue = PropertyValues[i];
propertyValue.Conditions = TriggerConditions;
switch (propertyValue.ValueType)
{
case PropertyValueType.Trigger:
propertyValue.ValueType = PropertyValueType.DataTrigger;
break;
case PropertyValueType.PropertyTriggerResource:
propertyValue.ValueType = PropertyValueType.DataTriggerResource;
break;
default:
throw new InvalidOperationException(SR.Get(SRID.UnexpectedValueTypeForDataTrigger, propertyValue.ValueType));
}
// Put back modified struct
PropertyValues[i] = propertyValue;
}
base.Seal();
}
// evaluate the current state of the trigger
internal override bool GetCurrentState(DependencyObject container, UncommonField dataField)
{
bool retVal = (TriggerConditions.Length > 0);
for( int i = 0; retVal && i < TriggerConditions.Length; i++ )
{
retVal = TriggerConditions[i].ConvertAndMatch(StyleHelper.GetDataTriggerValue(dataField, container, TriggerConditions[i].Binding));
}
return retVal;
}
private ConditionCollection _conditions = new ConditionCollection();
private SetterBaseCollection _setters = null;
}
}
// 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: Defines MultiDataTrigger object, akin to MultiTrigger except it
// gets values from data.
//
//---------------------------------------------------------------------------
using MS.Utility;
using System;
using System.Diagnostics;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Windows.Data;
using System.Windows.Markup;
namespace System.Windows
{
///
/// A multiple Style data conditional dependency driver
///
[ContentProperty("Setters")]
public sealed class MultiDataTrigger : TriggerBase, IAddChild
{
///
/// Conditions collection
///
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ConditionCollection Conditions
{
get
{
// Verify Context Access
VerifyAccess();
return _conditions;
}
}
///
/// Collection of Setter objects, which describes what to apply
/// when this trigger is active.
///
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public SetterBaseCollection Setters
{
get
{
// Verify Context Access
VerifyAccess();
if( _setters == null )
{
_setters = new SetterBaseCollection();
}
return _setters;
}
}
///
/// This method is called to Add a Setter object as a child of the Style.
///
///
/// The object to add as a child; it must be a Setter or subclass.
///
void IAddChild.AddChild (Object value)
{
// Verify Context Access
VerifyAccess();
Setters.Add(Trigger.CheckChildIsSetter(value));
}
///
/// This method is called by the parser when text appears under the tag in markup.
/// As default Styles do not support text, calling this method has no effect.
///
///
/// Text to add as a child.
///
void IAddChild.AddText (string text)
{
// Verify Context Access
VerifyAccess();
XamlSerializerUtil.ThrowIfNonWhiteSpaceInAddText(text, this);
}
internal override void Seal()
{
if (IsSealed)
{
return;
}
// Process the _setters collection: Copy values into PropertyValueList and seal the Setter objects.
ProcessSettersCollection(_setters);
if (_conditions.Count > 0)
{
// Seal conditions
_conditions.Seal(ValueLookupType.DataTrigger);
}
// Build conditions array from collection
TriggerConditions = new TriggerCondition[_conditions.Count];
for (int i = 0; i < TriggerConditions.Length; ++i)
{
if (_conditions[i].SourceName != null && _conditions[i].SourceName.Length > 0)
{
throw new InvalidOperationException(SR.Get(SRID.SourceNameNotSupportedForDataTriggers));
}
TriggerConditions[i] = new TriggerCondition(
_conditions[i].Binding,
LogicalOp.Equals,
_conditions[i].Value);
}
// Set conditions array for all property triggers
for (int i = 0; i < PropertyValues.Count; ++i)
{
PropertyValue propertyValue = PropertyValues[i];
propertyValue.Conditions = TriggerConditions;
switch (propertyValue.ValueType)
{
case PropertyValueType.Trigger:
propertyValue.ValueType = PropertyValueType.DataTrigger;
break;
case PropertyValueType.PropertyTriggerResource:
propertyValue.ValueType = PropertyValueType.DataTriggerResource;
break;
default:
throw new InvalidOperationException(SR.Get(SRID.UnexpectedValueTypeForDataTrigger, propertyValue.ValueType));
}
// Put back modified struct
PropertyValues[i] = propertyValue;
}
base.Seal();
}
// evaluate the current state of the trigger
internal override bool GetCurrentState(DependencyObject container, UncommonField dataField)
{
bool retVal = (TriggerConditions.Length > 0);
for( int i = 0; retVal && i < TriggerConditions.Length; i++ )
{
retVal = TriggerConditions[i].ConvertAndMatch(StyleHelper.GetDataTriggerValue(dataField, container, TriggerConditions[i].Binding));
}
return retVal;
}
private ConditionCollection _conditions = new ConditionCollection();
private SetterBaseCollection _setters = 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
- MaxSessionCountExceededException.cs
- XmlQueryCardinality.cs
- StsCommunicationException.cs
- FormConverter.cs
- ValueTable.cs
- CacheMode.cs
- PagePropertiesChangingEventArgs.cs
- TextEffectCollection.cs
- RadioButton.cs
- KeyGestureConverter.cs
- _HeaderInfo.cs
- InvalidPropValue.cs
- CodeAttributeDeclaration.cs
- AttributeEmitter.cs
- MethodBody.cs
- OleDbTransaction.cs
- MetadataItem_Static.cs
- PublishLicense.cs
- _ProxyRegBlob.cs
- ShaperBuffers.cs
- DialogBaseForm.cs
- ReaderWriterLockWrapper.cs
- HotSpot.cs
- IndentTextWriter.cs
- MatrixAnimationBase.cs
- WebConfigurationHost.cs
- PersianCalendar.cs
- DrawingContext.cs
- AnonymousIdentificationModule.cs
- Vector3DIndependentAnimationStorage.cs
- ResXResourceWriter.cs
- ActivityLocationReferenceEnvironment.cs
- __ComObject.cs
- Thread.cs
- SimpleMailWebEventProvider.cs
- CodeExporter.cs
- WpfGeneratedKnownProperties.cs
- Soap.cs
- BitmapEffect.cs
- Ray3DHitTestResult.cs
- PublisherMembershipCondition.cs
- Misc.cs
- XmlSchemaGroupRef.cs
- CacheOutputQuery.cs
- ExpressionBuilderContext.cs
- PreviewPageInfo.cs
- Group.cs
- SmiRecordBuffer.cs
- InfiniteIntConverter.cs
- QueryOutputWriter.cs
- ClearTypeHintValidation.cs
- AnyAllSearchOperator.cs
- VirtualPathProvider.cs
- RegexCompilationInfo.cs
- TextDataBindingHandler.cs
- HttpPostedFileBase.cs
- ArraySortHelper.cs
- BCLDebug.cs
- ErrorLog.cs
- AddressUtility.cs
- SerialReceived.cs
- Site.cs
- ProfilePropertyNameValidator.cs
- GridErrorDlg.cs
- DirectoryRootQuery.cs
- BitmapFrameEncode.cs
- LogManagementAsyncResult.cs
- EntitySqlQueryBuilder.cs
- XmlLinkedNode.cs
- HashSetEqualityComparer.cs
- QfeChecker.cs
- WebServicesDescriptionAttribute.cs
- DashStyles.cs
- ToolStripPanelCell.cs
- XmlSerializerFactory.cs
- DbUpdateCommandTree.cs
- DocumentViewerAutomationPeer.cs
- RequestChannel.cs
- WebPartDeleteVerb.cs
- ClientRoleProvider.cs
- UpDownBase.cs
- DockingAttribute.cs
- ModuleElement.cs
- SetStateEventArgs.cs
- ImageMapEventArgs.cs
- X509SecurityTokenProvider.cs
- UnmanagedMarshal.cs
- OrCondition.cs
- AttributeEmitter.cs
- COM2EnumConverter.cs
- EmptyControlCollection.cs
- RegisteredDisposeScript.cs
- ToolStripSplitButton.cs
- ItemCollection.cs
- GraphicsPathIterator.cs
- ConsumerConnectionPointCollection.cs
- NamedPipeHostedTransportConfiguration.cs
- SchemaTypeEmitter.cs
- SafeFileHandle.cs
- ExpandableObjectConverter.cs