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 ListGetChildrenCore() { 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
- IUnknownConstantAttribute.cs
- RedistVersionInfo.cs
- MemberMaps.cs
- TableRow.cs
- SqlErrorCollection.cs
- ListBindingConverter.cs
- TextEditorSpelling.cs
- WebPartZoneBase.cs
- Pair.cs
- EntityDataReader.cs
- ColumnHeader.cs
- ControlBuilderAttribute.cs
- EmissiveMaterial.cs
- NameTable.cs
- CustomErrorCollection.cs
- ResourceProviderFactory.cs
- NetNamedPipeSecurityMode.cs
- EventEntry.cs
- EventProxy.cs
- BinaryObjectWriter.cs
- DataGridCellClipboardEventArgs.cs
- RequestStatusBarUpdateEventArgs.cs
- Query.cs
- RpcCryptoContext.cs
- SystemColors.cs
- XmlSchemaAttribute.cs
- InvalidWorkflowException.cs
- MissingManifestResourceException.cs
- InternalRelationshipCollection.cs
- GridViewUpdateEventArgs.cs
- DataGridViewCellStyle.cs
- _NtlmClient.cs
- SystemPens.cs
- LocalizableAttribute.cs
- PeerInvitationResponse.cs
- ReadWriteSpinLock.cs
- ConfigXmlWhitespace.cs
- CompositionTarget.cs
- Path.cs
- SqlCacheDependencySection.cs
- BamlRecordHelper.cs
- PropertyPath.cs
- FrameworkTemplate.cs
- InvalidOperationException.cs
- DataGridViewCellParsingEventArgs.cs
- EmulateRecognizeCompletedEventArgs.cs
- HebrewNumber.cs
- GeneralTransform3DTo2D.cs
- ErrorFormatterPage.cs
- ToolStripStatusLabel.cs
- EntityViewGenerator.cs
- MailSettingsSection.cs
- HitTestWithPointDrawingContextWalker.cs
- MemberPath.cs
- Content.cs
- StrongNameKeyPair.cs
- CellPartitioner.cs
- OleDbMetaDataFactory.cs
- DesignerDataParameter.cs
- NamespaceInfo.cs
- ExternalFile.cs
- MessageDecoder.cs
- HtmlTextViewAdapter.cs
- TypeHelpers.cs
- Application.cs
- ManipulationCompletedEventArgs.cs
- RTTypeWrapper.cs
- DeclaredTypeValidator.cs
- shaperfactoryquerycachekey.cs
- DetailsViewInsertedEventArgs.cs
- Compiler.cs
- UnsafePeerToPeerMethods.cs
- XmlSchemaDatatype.cs
- AssemblyName.cs
- ApplicationException.cs
- PointKeyFrameCollection.cs
- ProtocolsConfigurationEntry.cs
- SafeLibraryHandle.cs
- PropertyTabAttribute.cs
- ColorConverter.cs
- AliasGenerator.cs
- HtmlEncodedRawTextWriter.cs
- SchemaObjectWriter.cs
- xmlsaver.cs
- IndependentAnimationStorage.cs
- RolePrincipal.cs
- DesignerLoader.cs
- PieceNameHelper.cs
- EdmScalarPropertyAttribute.cs
- HttpCacheParams.cs
- SymbolEqualComparer.cs
- SystemColors.cs
- XamlInt32CollectionSerializer.cs
- Bitmap.cs
- AccessControlEntry.cs
- ConcurrentBag.cs
- DbParameterHelper.cs
- XmlSchemaCollection.cs
- xmlsaver.cs
- querybuilder.cs