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
- MetadataItem.cs
- Monitor.cs
- X509Certificate2.cs
- IPHostEntry.cs
- SingleAnimation.cs
- Debug.cs
- ErrorWebPart.cs
- MailWebEventProvider.cs
- HttpRawResponse.cs
- XamlClipboardData.cs
- StrokeIntersection.cs
- ResolveNameEventArgs.cs
- CultureSpecificStringDictionary.cs
- WebBrowserNavigatingEventHandler.cs
- DataGridViewColumn.cs
- DesignerVerbCollection.cs
- FixedDocumentSequencePaginator.cs
- sqlpipe.cs
- StorageModelBuildProvider.cs
- AdPostCacheSubstitution.cs
- DataRowChangeEvent.cs
- _Semaphore.cs
- XMLUtil.cs
- WebHttpEndpointElement.cs
- GridViewUpdatedEventArgs.cs
- DESCryptoServiceProvider.cs
- AssociativeAggregationOperator.cs
- DesignerAttribute.cs
- linebase.cs
- DataGridViewCellValidatingEventArgs.cs
- DoubleAverageAggregationOperator.cs
- GlyphCache.cs
- IFlowDocumentViewer.cs
- StringValidator.cs
- TypeUtil.cs
- UrlAuthorizationModule.cs
- RegisteredArrayDeclaration.cs
- LineBreak.cs
- SQLSingle.cs
- CountdownEvent.cs
- PathFigure.cs
- Int16Storage.cs
- OleDbRowUpdatedEvent.cs
- AccessedThroughPropertyAttribute.cs
- SocketManager.cs
- FormViewInsertedEventArgs.cs
- Attachment.cs
- ServicePointManager.cs
- SchemaSetCompiler.cs
- TextContainerChangedEventArgs.cs
- NativeActivity.cs
- TextElementCollectionHelper.cs
- WorkflowOwnershipException.cs
- DocumentProperties.cs
- EntityDataSourceConfigureObjectContext.cs
- StorageRoot.cs
- rsa.cs
- RegexReplacement.cs
- PowerStatus.cs
- Unit.cs
- StringPropertyBuilder.cs
- CellRelation.cs
- Point3DAnimation.cs
- ObjectConverter.cs
- UserControlParser.cs
- ApplicationFileParser.cs
- Resources.Designer.cs
- BitStream.cs
- KeyedCollection.cs
- NotSupportedException.cs
- DataChangedEventManager.cs
- DiscoveryDocumentSearchPattern.cs
- FormViewRow.cs
- TableDetailsRow.cs
- DesignerForm.cs
- ConsumerConnectionPoint.cs
- HandleRef.cs
- SymbolPair.cs
- QilXmlReader.cs
- Keywords.cs
- CodeSubDirectory.cs
- AnimationLayer.cs
- HandlerWithFactory.cs
- Cursor.cs
- UIHelper.cs
- StyleCollection.cs
- QilReplaceVisitor.cs
- GenericXmlSecurityToken.cs
- XmlDocumentType.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- ColorPalette.cs
- _DisconnectOverlappedAsyncResult.cs
- PerformanceCounterLib.cs
- OperatorExpressions.cs
- SrgsElementFactory.cs
- TextCompositionEventArgs.cs
- PointLightBase.cs
- SQLMembershipProvider.cs
- CommandConverter.cs
- ConfigurationPropertyAttribute.cs