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
- NumberFormatInfo.cs
- ObjectDataSource.cs
- CharacterMetricsDictionary.cs
- ListenerSessionConnectionReader.cs
- Rfc2898DeriveBytes.cs
- BindToObject.cs
- OleDbSchemaGuid.cs
- UnsignedPublishLicense.cs
- OutputCacheModule.cs
- TemplateBaseAction.cs
- WindowShowOrOpenTracker.cs
- HebrewCalendar.cs
- ChannelSettingsElement.cs
- UnitControl.cs
- CodeTypeReferenceExpression.cs
- PackWebRequest.cs
- RichTextBox.cs
- IdentityValidationException.cs
- HwndSourceParameters.cs
- SudsWriter.cs
- TableRowGroup.cs
- AstTree.cs
- FullTrustAssembliesSection.cs
- RegexCharClass.cs
- PromptStyle.cs
- QueryActivatableWorkflowsCommand.cs
- WindowsAuthenticationEventArgs.cs
- EncodingTable.cs
- Compiler.cs
- BmpBitmapEncoder.cs
- Scripts.cs
- CodeEntryPointMethod.cs
- Crc32Helper.cs
- ReflectEventDescriptor.cs
- MetadataArtifactLoaderCompositeFile.cs
- PersonalizationProvider.cs
- EtwTrace.cs
- RegexStringValidatorAttribute.cs
- LayoutEditorPart.cs
- CustomAttributeFormatException.cs
- _CacheStreams.cs
- DefaultEvaluationContext.cs
- SequentialUshortCollection.cs
- HtmlDocument.cs
- Blend.cs
- BaseAsyncResult.cs
- Knowncolors.cs
- ResourcePool.cs
- Rfc4050KeyFormatter.cs
- RowVisual.cs
- UpdateTracker.cs
- UpdateManifestForBrowserApplication.cs
- SmtpReplyReaderFactory.cs
- ConcurrentBag.cs
- WindowsAltTab.cs
- ToolStripArrowRenderEventArgs.cs
- LineBreak.cs
- BrowserTree.cs
- DisplayNameAttribute.cs
- DataGridColumnDropSeparator.cs
- Decimal.cs
- ActivationArguments.cs
- Rect3DConverter.cs
- CategoryValueConverter.cs
- CompareValidator.cs
- HandlerMappingMemo.cs
- WSSecurityPolicy12.cs
- SQLInt32Storage.cs
- ProcessModuleDesigner.cs
- WsdlBuildProvider.cs
- SequentialOutput.cs
- TreeNodeSelectionProcessor.cs
- WindowsListViewGroup.cs
- ListManagerBindingsCollection.cs
- MetadataPropertyvalue.cs
- HttpCacheVaryByContentEncodings.cs
- CellCreator.cs
- CallbackDebugBehavior.cs
- TlsnegoTokenAuthenticator.cs
- Roles.cs
- ReliabilityContractAttribute.cs
- DataColumnCollection.cs
- DecoderNLS.cs
- EncryptedData.cs
- SafeLocalMemHandle.cs
- Line.cs
- RelationshipEntry.cs
- Ray3DHitTestResult.cs
- ApplicationSettingsBase.cs
- JoinCqlBlock.cs
- DefaultAsyncDataDispatcher.cs
- _NestedMultipleAsyncResult.cs
- PropertyRecord.cs
- ByteRangeDownloader.cs
- SecurityUtils.cs
- CollectionsUtil.cs
- WinInet.cs
- SoapIncludeAttribute.cs
- DataGridViewSelectedRowCollection.cs
- ColumnCollection.cs