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
- ApplicationDirectory.cs
- ConstructorNeedsTagAttribute.cs
- Normalization.cs
- TypeSchema.cs
- BamlStream.cs
- DataTableExtensions.cs
- PhonemeConverter.cs
- AsymmetricKeyExchangeFormatter.cs
- Clause.cs
- Message.cs
- BeginSelectCardRequest.cs
- _ProxyChain.cs
- ResolveMatchesMessageCD1.cs
- ValidatorCompatibilityHelper.cs
- ServiceManagerHandle.cs
- ACE.cs
- CodeArrayCreateExpression.cs
- SpellerStatusTable.cs
- FullTextBreakpoint.cs
- XmlObjectSerializerReadContextComplex.cs
- FormsAuthenticationConfiguration.cs
- XmlSchemaCollection.cs
- XmlSchemaSearchPattern.cs
- TypeSystemHelpers.cs
- PlainXmlSerializer.cs
- Trace.cs
- DocumentCollection.cs
- RelationshipDetailsCollection.cs
- WebControlParameterProxy.cs
- EdgeProfileValidation.cs
- ResXResourceSet.cs
- OracleBinary.cs
- TimeStampChecker.cs
- OperandQuery.cs
- TabPanel.cs
- ZipIOExtraField.cs
- AssemblyInfo.cs
- XmlSubtreeReader.cs
- BitmapEffect.cs
- ReadContentAsBinaryHelper.cs
- TypeUtil.cs
- PhoneCallDesigner.cs
- TextHidden.cs
- DataGridRelationshipRow.cs
- ScrollData.cs
- DesignerVerb.cs
- XmlObjectSerializerContext.cs
- XmlSchemaAny.cs
- SamlConditions.cs
- BaseProcessor.cs
- BaseDataBoundControl.cs
- RadioButton.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- TypeUtil.cs
- KnowledgeBase.cs
- SemanticResultValue.cs
- RemotingSurrogateSelector.cs
- TextTreeTextBlock.cs
- DataColumnChangeEvent.cs
- DateTimeConverter.cs
- DateTimeParse.cs
- TimelineGroup.cs
- Soap11ServerProtocol.cs
- FrameworkContentElement.cs
- coordinatorfactory.cs
- HttpListenerContext.cs
- ValidationPropertyAttribute.cs
- TimerEventSubscription.cs
- HttpDebugHandler.cs
- PropertyEmitterBase.cs
- ConfigurationPropertyAttribute.cs
- GroupBoxRenderer.cs
- SolidColorBrush.cs
- HandlerBase.cs
- ObjectConverter.cs
- EncryptedKey.cs
- datacache.cs
- PropertyDescriptor.cs
- ELinqQueryState.cs
- Crypto.cs
- UIEndRequest.cs
- ObjectStateManager.cs
- SatelliteContractVersionAttribute.cs
- TreeNodeBindingDepthConverter.cs
- StringToken.cs
- PassportIdentity.cs
- DiagnosticEventProvider.cs
- KeyPullup.cs
- SqlNamer.cs
- IsolatedStorageFile.cs
- MultipartIdentifier.cs
- HttpListenerException.cs
- BufferModeSettings.cs
- OdbcReferenceCollection.cs
- URIFormatException.cs
- SafeRightsManagementQueryHandle.cs
- FormsAuthenticationTicket.cs
- SelectionProviderWrapper.cs
- SqlDataSourceCache.cs
- RectangleF.cs