Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Framework / System / Windows / MultiTrigger.cs / 1 / MultiTrigger.cs
using System.Collections.Specialized;
using System.ComponentModel;
using System.IO;
using System.Windows.Markup;
using MS.Utility;
using System;
using System.Diagnostics;
namespace System.Windows
{
///
/// A multiple Style property conditional dependency driver
///
[ContentProperty("Setters")]
public sealed class MultiTrigger : 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.Trigger);
}
// Build conditions array from collection
TriggerConditions = new TriggerCondition[_conditions.Count];
for (int i = 0; i < TriggerConditions.Length; i++)
{
TriggerConditions[i] = new TriggerCondition(
_conditions[i].Property,
LogicalOp.Equals,
_conditions[i].Value,
(_conditions[i].SourceName != null) ? _conditions[i].SourceName : StyleHelper.SelfName);
}
// Set conditions array for all property triggers
for (int i = 0; i < PropertyValues.Count; i++)
{
PropertyValue propertyValue = PropertyValues[i];
propertyValue.Conditions = TriggerConditions;
// 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++ )
{
Debug.Assert( TriggerConditions[i].SourceChildIndex == 0,
"This method was created to handle properties on the containing object, more work is needed to handle templated children too." );
retVal = TriggerConditions[i].Match(container.GetValue(TriggerConditions[i].Property));
}
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.
using System.Collections.Specialized;
using System.ComponentModel;
using System.IO;
using System.Windows.Markup;
using MS.Utility;
using System;
using System.Diagnostics;
namespace System.Windows
{
///
/// A multiple Style property conditional dependency driver
///
[ContentProperty("Setters")]
public sealed class MultiTrigger : 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.Trigger);
}
// Build conditions array from collection
TriggerConditions = new TriggerCondition[_conditions.Count];
for (int i = 0; i < TriggerConditions.Length; i++)
{
TriggerConditions[i] = new TriggerCondition(
_conditions[i].Property,
LogicalOp.Equals,
_conditions[i].Value,
(_conditions[i].SourceName != null) ? _conditions[i].SourceName : StyleHelper.SelfName);
}
// Set conditions array for all property triggers
for (int i = 0; i < PropertyValues.Count; i++)
{
PropertyValue propertyValue = PropertyValues[i];
propertyValue.Conditions = TriggerConditions;
// 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++ )
{
Debug.Assert( TriggerConditions[i].SourceChildIndex == 0,
"This method was created to handle properties on the containing object, more work is needed to handle templated children too." );
retVal = TriggerConditions[i].Match(container.GetValue(TriggerConditions[i].Property));
}
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
- DodSequenceMerge.cs
- CultureTableRecord.cs
- SelectorAutomationPeer.cs
- DetailsViewCommandEventArgs.cs
- IntPtr.cs
- SqlPersonalizationProvider.cs
- ApplicationFileParser.cs
- safesecurityhelperavalon.cs
- UIElementPropertyUndoUnit.cs
- OleDbInfoMessageEvent.cs
- tooltip.cs
- InteropTrackingRecord.cs
- BitStream.cs
- ListViewGroup.cs
- LinqDataSourceEditData.cs
- NameValueConfigurationElement.cs
- SystemColors.cs
- ComplexType.cs
- BatchServiceHost.cs
- DbException.cs
- FormViewRow.cs
- SkipQueryOptionExpression.cs
- XmlObjectSerializerWriteContext.cs
- DescriptionAttribute.cs
- CryptoProvider.cs
- SRDisplayNameAttribute.cs
- BamlBinaryReader.cs
- SelectorAutomationPeer.cs
- xsdvalidator.cs
- PackagePart.cs
- ClientScriptManagerWrapper.cs
- XmlSerializationGeneratedCode.cs
- EventDescriptor.cs
- ListViewSortEventArgs.cs
- ErrorWebPart.cs
- TrustLevel.cs
- SspiSecurityTokenParameters.cs
- OutputWindow.cs
- CodeExpressionStatement.cs
- _SslStream.cs
- TextParentUndoUnit.cs
- BookmarkEventArgs.cs
- SqlNode.cs
- ObjRef.cs
- ViewLoader.cs
- FaultHandlingFilter.cs
- SimpleTableProvider.cs
- PolicyValidationException.cs
- Mappings.cs
- TypedReference.cs
- ToolStripRenderer.cs
- CapabilitiesRule.cs
- XhtmlTextWriter.cs
- InternalTypeHelper.cs
- SafeViewOfFileHandle.cs
- PublishLicense.cs
- OracleMonthSpan.cs
- Assembly.cs
- ObjRef.cs
- SmiContextFactory.cs
- ThemeDictionaryExtension.cs
- SynchronousChannel.cs
- OletxEnlistment.cs
- NoPersistHandle.cs
- OdbcConnection.cs
- MachineKeySection.cs
- ConfigurationStrings.cs
- UserInitiatedRoutedEventPermissionAttribute.cs
- SettingsPropertyNotFoundException.cs
- DispatcherTimer.cs
- TextTreeRootNode.cs
- DrawingContextDrawingContextWalker.cs
- SqlCacheDependencyDatabase.cs
- _KerberosClient.cs
- HttpEncoderUtility.cs
- GenericRootAutomationPeer.cs
- Cursor.cs
- DrawingAttributeSerializer.cs
- DescendantOverDescendantQuery.cs
- StartFileNameEditor.cs
- GetPageCompletedEventArgs.cs
- DataControlField.cs
- FileIOPermission.cs
- InsufficientExecutionStackException.cs
- ChtmlTextWriter.cs
- TabletDeviceInfo.cs
- DynamicDocumentPaginator.cs
- ScaleTransform.cs
- Single.cs
- RoutedPropertyChangedEventArgs.cs
- ImpersonationContext.cs
- PageCache.cs
- Win32KeyboardDevice.cs
- DrawingGroup.cs
- EnumType.cs
- BaseInfoTable.cs
- Validator.cs
- Menu.cs
- ListItemConverter.cs
- InheritanceContextHelper.cs