Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / MultiDataTrigger.cs / 1305600 / 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
- ScrollPatternIdentifiers.cs
- COM2ExtendedTypeConverter.cs
- EntityTypeEmitter.cs
- TimeSpanStorage.cs
- PerspectiveCamera.cs
- XmlAttributeProperties.cs
- XmlCharCheckingWriter.cs
- VariableQuery.cs
- XMLSchema.cs
- ExpressionNode.cs
- XPathDocument.cs
- TransactionCache.cs
- PtsContext.cs
- ObjectConverter.cs
- HtmlForm.cs
- Version.cs
- SiteMapSection.cs
- Parameter.cs
- PropertiesTab.cs
- TdsEnums.cs
- AbstractExpressions.cs
- TextRunCacheImp.cs
- RoutedEventHandlerInfo.cs
- SessionStateItemCollection.cs
- SslStream.cs
- TimeZoneInfo.cs
- TcpProcessProtocolHandler.cs
- ControlIdConverter.cs
- QilStrConcatenator.cs
- GenericUriParser.cs
- TileModeValidation.cs
- TextBlockAutomationPeer.cs
- DeviceContexts.cs
- MultiSelectRootGridEntry.cs
- ToolboxControl.cs
- CodeCommentStatement.cs
- GenerateTemporaryTargetAssembly.cs
- Oid.cs
- StyleCollection.cs
- IdentitySection.cs
- Rotation3DKeyFrameCollection.cs
- WebPartConnectionsEventArgs.cs
- DelimitedListTraceListener.cs
- ResourceDescriptionAttribute.cs
- CompiledRegexRunnerFactory.cs
- TraceSource.cs
- _RequestCacheProtocol.cs
- DbLambda.cs
- XmlBufferReader.cs
- TypeSystem.cs
- RoutedCommand.cs
- SafeThreadHandle.cs
- TraceContextEventArgs.cs
- RawKeyboardInputReport.cs
- SingleTagSectionHandler.cs
- DataControlPagerLinkButton.cs
- WebPartRestoreVerb.cs
- Window.cs
- ObjectTag.cs
- WizardDesigner.cs
- TemplatePagerField.cs
- BrowserCapabilitiesFactoryBase.cs
- ProviderConnectionPointCollection.cs
- TextEditorContextMenu.cs
- GeneralTransform3DTo2D.cs
- XmlHierarchicalDataSourceView.cs
- FrameworkElement.cs
- TypeGeneratedEventArgs.cs
- TextEditor.cs
- CachingHintValidation.cs
- _AcceptOverlappedAsyncResult.cs
- TextServicesCompartment.cs
- ActivityCodeDomReferenceService.cs
- DrawingContextWalker.cs
- MemberJoinTreeNode.cs
- SiteMapDataSource.cs
- ThreadAbortException.cs
- WinInet.cs
- PointCollection.cs
- StructuredTypeEmitter.cs
- WebPartEditorApplyVerb.cs
- PolicyManager.cs
- LockCookie.cs
- DPAPIProtectedConfigurationProvider.cs
- CriticalFinalizerObject.cs
- ColorContextHelper.cs
- TimeZone.cs
- ObjectQuery.cs
- StoragePropertyMapping.cs
- OptimisticConcurrencyException.cs
- XPathNode.cs
- COM2TypeInfoProcessor.cs
- RelatedPropertyManager.cs
- ViewStateAttachedPropertyFeature.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- ComponentResourceKey.cs
- SpAudioStreamWrapper.cs
- DesigntimeLicenseContext.cs
- XmlWriterSettings.cs
- ItemsPresenter.cs