Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- ProfileSettings.cs
- MenuTracker.cs
- SmtpSection.cs
- SingleSelectRootGridEntry.cs
- SingleStorage.cs
- DataFormat.cs
- NativeRecognizer.cs
- RtfControlWordInfo.cs
- PinnedBufferMemoryStream.cs
- JsonMessageEncoderFactory.cs
- Events.cs
- Transaction.cs
- PackageDigitalSignatureManager.cs
- _ShellExpression.cs
- LineServicesCallbacks.cs
- RijndaelManagedTransform.cs
- DetailsViewInsertedEventArgs.cs
- EntitySet.cs
- ConfigXmlCDataSection.cs
- InstancePersistenceCommand.cs
- TextTreeTextNode.cs
- CollectionViewGroupInternal.cs
- RowType.cs
- XmlElementList.cs
- RemotingConfigParser.cs
- Form.cs
- ControlUtil.cs
- AuthenticationSection.cs
- SafeSecurityHelper.cs
- CLRBindingWorker.cs
- ThreadInterruptedException.cs
- MulticastDelegate.cs
- OleDbDataReader.cs
- PeerCollaboration.cs
- BrowserCapabilitiesCompiler.cs
- UserControl.cs
- PageThemeCodeDomTreeGenerator.cs
- ToolStripContainer.cs
- ObjectReaderCompiler.cs
- DotAtomReader.cs
- QilPatternFactory.cs
- FaultContractInfo.cs
- ConditionalDesigner.cs
- Accessible.cs
- SqlConnectionFactory.cs
- SerTrace.cs
- ButtonBaseAutomationPeer.cs
- PTProvider.cs
- ObjectCache.cs
- ToolStripSeparator.cs
- ObjectSet.cs
- DetailsViewModeEventArgs.cs
- OleDbFactory.cs
- SqlRowUpdatedEvent.cs
- CounterCreationDataCollection.cs
- WmlFormAdapter.cs
- AssemblyFilter.cs
- AuthenticationSection.cs
- EncryptedType.cs
- ClipboardData.cs
- HttpCacheVaryByContentEncodings.cs
- DBBindings.cs
- EventWaitHandleSecurity.cs
- ListDictionaryInternal.cs
- JoinCqlBlock.cs
- HwndProxyElementProvider.cs
- X509Extension.cs
- ZipArchive.cs
- EUCJPEncoding.cs
- DeclarationUpdate.cs
- CacheManager.cs
- StandardBindingCollectionElement.cs
- HasCopySemanticsAttribute.cs
- StickyNoteHelper.cs
- DataGridViewColumnCollection.cs
- NotifyInputEventArgs.cs
- ResourceKey.cs
- PropertyConverter.cs
- MsmqElementBase.cs
- SendContent.cs
- Bind.cs
- MessagePartDescription.cs
- DBCommand.cs
- ScrollViewer.cs
- JavaScriptString.cs
- BuildProvider.cs
- SqlMultiplexer.cs
- ElementHostAutomationPeer.cs
- DigitShape.cs
- Transform3D.cs
- SqlException.cs
- SimpleBitVector32.cs
- ContainerUIElement3D.cs
- CrossAppDomainChannel.cs
- ALinqExpressionVisitor.cs
- PackageRelationship.cs
- EventlogProvider.cs
- ObjectListCommandEventArgs.cs
- ConfigurationElement.cs
- CollectionType.cs