Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Framework / System / Windows / Automation / Peers / GroupItemAutomationPeer.cs / 1 / GroupItemAutomationPeer.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Security;
using System.Text;
using System.Windows;
using System.Windows.Automation.Provider;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Interop;
using System.Windows.Media;
using MS.Internal;
using MS.Win32;
namespace System.Windows.Automation.Peers
{
///
public class GroupItemAutomationPeer : FrameworkElementAutomationPeer
{
///
public GroupItemAutomationPeer(GroupItem owner): base(owner)
{
}
///
override protected string GetClassNameCore()
{
return "GroupItem";
}
///
override protected AutomationControlType GetAutomationControlTypeCore()
{
return AutomationControlType.Group;
}
///
protected override List GetChildrenCore()
{
GroupItem owner = (GroupItem)Owner;
ItemsControl itemsControl = ItemsControl.ItemsControlFromItemContainer(Owner);
if (itemsControl != null)
{
ItemsControlAutomationPeer itemsControlAP = itemsControl.CreateAutomationPeer() as ItemsControlAutomationPeer;
if (itemsControlAP != null)
{
ItemContainerGenerator generator = owner.Generator;
if (generator != null)
{
IList items = generator.Items;
List children = new List(items.Count);
ItemPeersStorage oldChildren = _dataChildren; //cache the old ones for possible reuse
_dataChildren = new ItemPeersStorage();
if (items.Count > 0)
{
foreach (object item in items)
{
CollectionViewGroup cvg = item as CollectionViewGroup;
if (cvg != null)
{
GroupItem groupItem = generator.ContainerFromItem(item) as GroupItem;
if (groupItem != null)
{
GroupItemAutomationPeer peer = groupItem.CreateAutomationPeer() as GroupItemAutomationPeer;
if (peer != null)
children.Add(peer);
}
}
else
{
//try to reuse old peer if it exists
ItemAutomationPeer peer = oldChildren[item];
//no old peer - create new one
if (peer == null)
peer = itemsControlAP.CreateItemAutomationPeerInternal(item);
//perform hookup so the events sourced from wrapper peer are fired as if from the data item
if (peer != null)
{
AutomationPeer wrapperPeer = peer.GetWrapperPeer();
if (wrapperPeer != null)
wrapperPeer.EventsSource = peer;
}
//protection from indistinguishable items - for example, 2 strings with same value
//this scenario does not work in ItemsControl however is not checked for.
if (_dataChildren[item] == null)
{
children.Add(peer);
_dataChildren[item] = peer;
// Update ItemsControl cache too
// ItemPeers needs to be updated because used in Selector and other ItemsControl subclasses to access item peers directly
if (itemsControlAP.ItemPeers[item] == null)
{
itemsControlAP.ItemPeers[item] = peer;
}
}
}
}
return children;
}
}
}
}
return null;
}
private ItemPeersStorage _dataChildren = new ItemPeersStorage();
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Security;
using System.Text;
using System.Windows;
using System.Windows.Automation.Provider;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Interop;
using System.Windows.Media;
using MS.Internal;
using MS.Win32;
namespace System.Windows.Automation.Peers
{
///
public class GroupItemAutomationPeer : FrameworkElementAutomationPeer
{
///
public GroupItemAutomationPeer(GroupItem owner): base(owner)
{
}
///
override protected string GetClassNameCore()
{
return "GroupItem";
}
///
override protected AutomationControlType GetAutomationControlTypeCore()
{
return AutomationControlType.Group;
}
///
protected override List GetChildrenCore()
{
GroupItem owner = (GroupItem)Owner;
ItemsControl itemsControl = ItemsControl.ItemsControlFromItemContainer(Owner);
if (itemsControl != null)
{
ItemsControlAutomationPeer itemsControlAP = itemsControl.CreateAutomationPeer() as ItemsControlAutomationPeer;
if (itemsControlAP != null)
{
ItemContainerGenerator generator = owner.Generator;
if (generator != null)
{
IList items = generator.Items;
List children = new List(items.Count);
ItemPeersStorage oldChildren = _dataChildren; //cache the old ones for possible reuse
_dataChildren = new ItemPeersStorage();
if (items.Count > 0)
{
foreach (object item in items)
{
CollectionViewGroup cvg = item as CollectionViewGroup;
if (cvg != null)
{
GroupItem groupItem = generator.ContainerFromItem(item) as GroupItem;
if (groupItem != null)
{
GroupItemAutomationPeer peer = groupItem.CreateAutomationPeer() as GroupItemAutomationPeer;
if (peer != null)
children.Add(peer);
}
}
else
{
//try to reuse old peer if it exists
ItemAutomationPeer peer = oldChildren[item];
//no old peer - create new one
if (peer == null)
peer = itemsControlAP.CreateItemAutomationPeerInternal(item);
//perform hookup so the events sourced from wrapper peer are fired as if from the data item
if (peer != null)
{
AutomationPeer wrapperPeer = peer.GetWrapperPeer();
if (wrapperPeer != null)
wrapperPeer.EventsSource = peer;
}
//protection from indistinguishable items - for example, 2 strings with same value
//this scenario does not work in ItemsControl however is not checked for.
if (_dataChildren[item] == null)
{
children.Add(peer);
_dataChildren[item] = peer;
// Update ItemsControl cache too
// ItemPeers needs to be updated because used in Selector and other ItemsControl subclasses to access item peers directly
if (itemsControlAP.ItemPeers[item] == null)
{
itemsControlAP.ItemPeers[item] = peer;
}
}
}
}
return children;
}
}
}
}
return null;
}
private ItemPeersStorage _dataChildren = new ItemPeersStorage();
}
}
// 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
- WebPartZone.cs
- NetworkStream.cs
- WSTrust.cs
- HttpResponse.cs
- QilExpression.cs
- NameValueFileSectionHandler.cs
- Int32RectConverter.cs
- SoapDocumentServiceAttribute.cs
- LongValidatorAttribute.cs
- XmlReturnReader.cs
- LinkedResource.cs
- XmlDictionaryString.cs
- OleDbCommand.cs
- ServiceOperation.cs
- ConfigurationSchemaErrors.cs
- __Error.cs
- DateTimeStorage.cs
- DbParameterHelper.cs
- WebServiceEnumData.cs
- HtmlInputRadioButton.cs
- TypefaceMetricsCache.cs
- TransactionManagerProxy.cs
- TextElementEnumerator.cs
- RepeatButtonAutomationPeer.cs
- XmlStringTable.cs
- TextParagraph.cs
- TileBrush.cs
- Pkcs7Recipient.cs
- ObjectStateFormatter.cs
- SimpleBitVector32.cs
- OutputCacheSettingsSection.cs
- XamlSerializationHelper.cs
- mactripleDES.cs
- WCFServiceClientProxyGenerator.cs
- BitmapEffectInput.cs
- NonSerializedAttribute.cs
- CreateUserWizardStep.cs
- DrawingCollection.cs
- DataProtection.cs
- graph.cs
- SortedDictionary.cs
- Configuration.cs
- WindowsFormsHost.cs
- AssociationType.cs
- CryptoApi.cs
- BCryptSafeHandles.cs
- BulletChrome.cs
- RecognizedPhrase.cs
- SurrogateSelector.cs
- BidPrivateBase.cs
- PreProcessInputEventArgs.cs
- CompositeFontInfo.cs
- SrgsElement.cs
- filewebresponse.cs
- SimpleParser.cs
- GatewayIPAddressInformationCollection.cs
- Number.cs
- UserInitiatedNavigationPermission.cs
- Accessors.cs
- ChannelSinkStacks.cs
- XmlSchemaGroup.cs
- ClientConfigurationHost.cs
- ParameterCollectionEditorForm.cs
- HeaderUtility.cs
- UriSection.cs
- ImageFormat.cs
- WorkerRequest.cs
- BulletedListEventArgs.cs
- PhysicalFontFamily.cs
- CodeArrayCreateExpression.cs
- HashMembershipCondition.cs
- CultureSpecificCharacterBufferRange.cs
- Number.cs
- SerializableAttribute.cs
- WebCategoryAttribute.cs
- DataQuery.cs
- DrawingContextDrawingContextWalker.cs
- GlyphsSerializer.cs
- PropertyInformation.cs
- InputManager.cs
- CommonXSendMessage.cs
- NamedObject.cs
- XmlNullResolver.cs
- SQLInt16Storage.cs
- CodeTypeOfExpression.cs
- DataGridViewControlCollection.cs
- Transform3DCollection.cs
- AssemblyAttributesGoHere.cs
- ThreadExceptionDialog.cs
- SizeLimitedCache.cs
- LinkedList.cs
- TextCompositionEventArgs.cs
- DataKeyArray.cs
- PersonalizationState.cs
- EmbeddedMailObjectsCollection.cs
- ImportCatalogPart.cs
- LinearKeyFrames.cs
- Attribute.cs
- DbDeleteCommandTree.cs
- X509InitiatorCertificateServiceElement.cs