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
- PropertyConverter.cs
- ContextQuery.cs
- PageHandlerFactory.cs
- DataGridViewLinkColumn.cs
- DrawingContextWalker.cs
- MachineSettingsSection.cs
- SoapIncludeAttribute.cs
- PseudoWebRequest.cs
- MissingMemberException.cs
- _UriTypeConverter.cs
- TextViewSelectionProcessor.cs
- FrugalMap.cs
- SoapAttributes.cs
- HandlerWithFactory.cs
- FontCacheUtil.cs
- itemelement.cs
- RuleInfoComparer.cs
- SqlFunctionAttribute.cs
- Crypto.cs
- LineMetrics.cs
- ExpressionDumper.cs
- UInt32Converter.cs
- DelegateArgument.cs
- WebPartConnectionsCancelEventArgs.cs
- coordinator.cs
- SynchronizedInputHelper.cs
- Parallel.cs
- DataBindEngine.cs
- AssociationTypeEmitter.cs
- util.cs
- Stream.cs
- PipeStream.cs
- TransformGroup.cs
- CodeGroup.cs
- RelativeSource.cs
- AnnotationStore.cs
- ListBindableAttribute.cs
- CompilerWrapper.cs
- SynchronizedDispatch.cs
- ActivationServices.cs
- CodeConstructor.cs
- EncodingTable.cs
- PointUtil.cs
- Logging.cs
- Page.cs
- EqualityComparer.cs
- httpstaticobjectscollection.cs
- ComponentRenameEvent.cs
- LineMetrics.cs
- _PooledStream.cs
- MailWriter.cs
- DelegateTypeInfo.cs
- StreamReader.cs
- WpfSharedBamlSchemaContext.cs
- DurableErrorHandler.cs
- userdatakeys.cs
- BypassElementCollection.cs
- DrawingState.cs
- PenThreadWorker.cs
- OSFeature.cs
- Model3D.cs
- TextUtf8RawTextWriter.cs
- FontWeights.cs
- TableCellsCollectionEditor.cs
- WSSecurityXXX2005.cs
- arabicshape.cs
- MsmqIntegrationBindingCollectionElement.cs
- FloaterParagraph.cs
- EventEntry.cs
- SymbolPair.cs
- ActivityDesignerLayoutSerializers.cs
- DescendentsWalker.cs
- NonDualMessageSecurityOverHttpElement.cs
- ExpressionReplacer.cs
- Quaternion.cs
- ApplicationTrust.cs
- QueryValue.cs
- PrimitiveType.cs
- StringResourceManager.cs
- Glyph.cs
- DropDownList.cs
- XmlProcessingInstruction.cs
- XmlHierarchicalDataSourceView.cs
- BindingExpressionBase.cs
- RequestValidator.cs
- ContentPlaceHolder.cs
- CreateRefExpr.cs
- ContentOperations.cs
- CompilationLock.cs
- SemanticAnalyzer.cs
- ConfigXmlReader.cs
- BitmapImage.cs
- TableLayoutColumnStyleCollection.cs
- MetadataSource.cs
- EncryptedHeaderXml.cs
- Rules.cs
- WsatEtwTraceListener.cs
- SystemGatewayIPAddressInformation.cs
- ExchangeUtilities.cs
- VisualBrush.cs