Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / Markup / ArrayExtension.cs / 1 / ArrayExtension.cs
/****************************************************************************\
*
* File: ArrayExtension.cs
*
* Class for Xaml markup extension for Arrays
*
* Copyright (C) 2004 by Microsoft Corporation. All rights reserved.
*
\***************************************************************************/
using System;
using System.Windows;
using System.Collections;
using System.ComponentModel;
namespace System.Windows.Markup
{
///
/// Class for Xaml markup extension for Arrays.
///
[ContentProperty("Items")]
[MarkupExtensionReturnType(typeof(Array))]
public class ArrayExtension : MarkupExtension, IAddChild
{
///
/// Constructor that takes no parameters. This creates an empty array.
///
public ArrayExtension()
{
}
///
/// Constructor that takes one parameter. This initializes the type of the array.
///
public ArrayExtension(
Type arrayType)
{
if (arrayType == null)
{
throw new ArgumentNullException("arrayType");
}
_arrayType = arrayType;
}
///
/// Constructor for writing
///
/// The array to write
public ArrayExtension(Array elements)
{
_arrayList.AddRange(elements);
_arrayType = elements.GetType().GetElementType();
}
///
/// Called to Add an object as a new array item. This will append the object to the end
/// of the array.
///
///
/// Object to add to the end of the array.
///
public void AddChild(Object value)
{
_arrayList.Add(value);
}
///
/// Called to Add a text as a new array item. This will append the object to the end
/// of the array.
///
///
/// Text to Add to the end of the array
///
public void AddText(string text)
{
AddChild(text);
}
///
/// Get and set the type of array to be created when calling ProvideValue
///
[ConstructorArgument("type")]
public Type Type
{
get { return _arrayType; }
set { _arrayType = value; }
}
///
/// An IList accessor to the contents of the array
///
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public IList Items
{
get { return _arrayList; }
}
///
/// Return an array that is sized to the number of objects added to the ArrayExtension.
///
/// Object that can provide services for the markup extension.
///
/// The Array containing all the objects added to this extension.
///
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (_arrayType == null)
{
throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionArrayType));
}
object retArray = null;
try
{
retArray = _arrayList.ToArray(_arrayType);
}
catch (System.InvalidCastException)
{
// If an element was added to the ArrayExtension that does not agree with the
// ArrayType, then an InvalidCastException will occur. Generate a more
// meaningful error for this case.
throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionArrayBadType, _arrayType.Name));
}
return retArray;
}
private ArrayList _arrayList = new ArrayList();
private Type _arrayType;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
/****************************************************************************\
*
* File: ArrayExtension.cs
*
* Class for Xaml markup extension for Arrays
*
* Copyright (C) 2004 by Microsoft Corporation. All rights reserved.
*
\***************************************************************************/
using System;
using System.Windows;
using System.Collections;
using System.ComponentModel;
namespace System.Windows.Markup
{
///
/// Class for Xaml markup extension for Arrays.
///
[ContentProperty("Items")]
[MarkupExtensionReturnType(typeof(Array))]
public class ArrayExtension : MarkupExtension, IAddChild
{
///
/// Constructor that takes no parameters. This creates an empty array.
///
public ArrayExtension()
{
}
///
/// Constructor that takes one parameter. This initializes the type of the array.
///
public ArrayExtension(
Type arrayType)
{
if (arrayType == null)
{
throw new ArgumentNullException("arrayType");
}
_arrayType = arrayType;
}
///
/// Constructor for writing
///
/// The array to write
public ArrayExtension(Array elements)
{
_arrayList.AddRange(elements);
_arrayType = elements.GetType().GetElementType();
}
///
/// Called to Add an object as a new array item. This will append the object to the end
/// of the array.
///
///
/// Object to add to the end of the array.
///
public void AddChild(Object value)
{
_arrayList.Add(value);
}
///
/// Called to Add a text as a new array item. This will append the object to the end
/// of the array.
///
///
/// Text to Add to the end of the array
///
public void AddText(string text)
{
AddChild(text);
}
///
/// Get and set the type of array to be created when calling ProvideValue
///
[ConstructorArgument("type")]
public Type Type
{
get { return _arrayType; }
set { _arrayType = value; }
}
///
/// An IList accessor to the contents of the array
///
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public IList Items
{
get { return _arrayList; }
}
///
/// Return an array that is sized to the number of objects added to the ArrayExtension.
///
/// Object that can provide services for the markup extension.
///
/// The Array containing all the objects added to this extension.
///
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (_arrayType == null)
{
throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionArrayType));
}
object retArray = null;
try
{
retArray = _arrayList.ToArray(_arrayType);
}
catch (System.InvalidCastException)
{
// If an element was added to the ArrayExtension that does not agree with the
// ArrayType, then an InvalidCastException will occur. Generate a more
// meaningful error for this case.
throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionArrayBadType, _arrayType.Name));
}
return retArray;
}
private ArrayList _arrayList = new ArrayList();
private Type _arrayType;
}
}
// 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
- Events.cs
- DataControlFieldsEditor.cs
- SafeProcessHandle.cs
- RegexCode.cs
- XmlDocumentFragment.cs
- HttpRequestTraceRecord.cs
- PersonalizableAttribute.cs
- AppDomainAttributes.cs
- AsyncParams.cs
- DataGridViewCellConverter.cs
- Crc32.cs
- IsolatedStorageSecurityState.cs
- SrgsNameValueTag.cs
- PropertyTabAttribute.cs
- ScrollViewer.cs
- StorageEndPropertyMapping.cs
- EndOfStreamException.cs
- XmlNodeList.cs
- CodeChecksumPragma.cs
- BitArray.cs
- SingleConverter.cs
- _NegoStream.cs
- Operand.cs
- PersonalizationEntry.cs
- EditorZoneBase.cs
- BorderGapMaskConverter.cs
- TypeRestriction.cs
- CompositeDataBoundControl.cs
- WorkflowValidationFailedException.cs
- StreamInfo.cs
- ActivityContext.cs
- Verify.cs
- PersonalizableAttribute.cs
- AuthenticationModulesSection.cs
- XmlSchemaSequence.cs
- SQLDecimalStorage.cs
- IResourceProvider.cs
- AccessDataSourceView.cs
- StrokeRenderer.cs
- RenderTargetBitmap.cs
- MouseGestureValueSerializer.cs
- WinFormsComponentEditor.cs
- EntityDataSourceSelectingEventArgs.cs
- DataComponentMethodGenerator.cs
- ArrayWithOffset.cs
- CodeMemberEvent.cs
- OracleConnectionStringBuilder.cs
- DocumentApplicationJournalEntry.cs
- StoreContentChangedEventArgs.cs
- ColorConverter.cs
- WsdlWriter.cs
- Interlocked.cs
- EntityCommandExecutionException.cs
- NullableIntAverageAggregationOperator.cs
- Inflater.cs
- WebRequestModuleElementCollection.cs
- EntityTypeEmitter.cs
- MetadataCache.cs
- OdbcDataReader.cs
- ColorConverter.cs
- TraceListeners.cs
- XmlUtil.cs
- ComponentRenameEvent.cs
- TextBoxView.cs
- Publisher.cs
- XmlSchemaGroup.cs
- IIS7UserPrincipal.cs
- SocketInformation.cs
- XsltFunctions.cs
- TableSectionStyle.cs
- ZipPackage.cs
- ComponentSerializationService.cs
- LockedBorderGlyph.cs
- ExpressionBuilder.cs
- IisHelper.cs
- ZipPackagePart.cs
- ExpressionBindingCollection.cs
- SlipBehavior.cs
- Encoder.cs
- SqlTriggerAttribute.cs
- AnimationClockResource.cs
- ExpressionBuilder.cs
- EventLogEntryCollection.cs
- Composition.cs
- CatalogZoneBase.cs
- SoapSchemaImporter.cs
- CodeTypeDelegate.cs
- HighContrastHelper.cs
- CrossContextChannel.cs
- AllMembershipCondition.cs
- PeerNameRecord.cs
- MetadataItemEmitter.cs
- CaseStatementSlot.cs
- ConstraintConverter.cs
- PropertyCollection.cs
- TextTreeInsertUndoUnit.cs
- ProxyElement.cs
- ComplusEndpointConfigContainer.cs
- PersistStreamTypeWrapper.cs
- OracleCommandBuilder.cs