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
- COM2IDispatchConverter.cs
- WebDescriptionAttribute.cs
- EditingMode.cs
- CompositionTarget.cs
- RewritingPass.cs
- Schedule.cs
- DictionaryBase.cs
- HttpCapabilitiesSectionHandler.cs
- ObsoleteAttribute.cs
- CommentGlyph.cs
- CollectionBuilder.cs
- PolicyReader.cs
- BuildManager.cs
- PersonalizationProviderHelper.cs
- FtpCachePolicyElement.cs
- BaseCAMarshaler.cs
- UnmanagedMemoryStream.cs
- RegexInterpreter.cs
- ManagedIStream.cs
- PathFigure.cs
- SingleKeyFrameCollection.cs
- ServiceInstallComponent.cs
- ISAPIRuntime.cs
- ColorContext.cs
- NameValueCollection.cs
- RijndaelManaged.cs
- SafeRegistryHandle.cs
- XmlAtomicValue.cs
- ThreadStaticAttribute.cs
- PolyLineSegment.cs
- EntityExpressionVisitor.cs
- VideoDrawing.cs
- InstanceKeyCompleteException.cs
- ThemeDirectoryCompiler.cs
- _IPv4Address.cs
- ButtonStandardAdapter.cs
- MultiPageTextView.cs
- LostFocusEventManager.cs
- RoutedUICommand.cs
- TextContainerChangedEventArgs.cs
- SqlInternalConnection.cs
- TraceHandler.cs
- NameValueConfigurationCollection.cs
- SrgsGrammarCompiler.cs
- Visitors.cs
- ContentDefinition.cs
- FunctionQuery.cs
- TextTreeRootNode.cs
- GlyphRunDrawing.cs
- EntitySqlQueryState.cs
- ProviderCollection.cs
- SelectorAutomationPeer.cs
- SqlBulkCopyColumnMapping.cs
- DataGridViewColumnConverter.cs
- RuntimeHelpers.cs
- MulticastNotSupportedException.cs
- Package.cs
- RenderCapability.cs
- PlanCompiler.cs
- HMACSHA256.cs
- GridViewDeleteEventArgs.cs
- Merger.cs
- GridViewPageEventArgs.cs
- ISO2022Encoding.cs
- StringAttributeCollection.cs
- XmlDataLoader.cs
- ApplyImportsAction.cs
- ConfigurationPropertyCollection.cs
- SpellerError.cs
- InkPresenter.cs
- Ref.cs
- Style.cs
- WMICapabilities.cs
- Triplet.cs
- JpegBitmapDecoder.cs
- XNodeNavigator.cs
- SQLMoneyStorage.cs
- RepeatButtonAutomationPeer.cs
- GridItemProviderWrapper.cs
- ByteAnimationUsingKeyFrames.cs
- RowBinding.cs
- BackStopAuthenticationModule.cs
- X509Utils.cs
- Pair.cs
- OdbcHandle.cs
- StreamGeometryContext.cs
- XmlLangPropertyAttribute.cs
- ImageFormatConverter.cs
- ExtenderControl.cs
- NavigationPropertyAccessor.cs
- TdsParserSessionPool.cs
- CodeNamespaceImport.cs
- ObjectStateManagerMetadata.cs
- DesignerActionListCollection.cs
- ResourceIDHelper.cs
- XmlDeclaration.cs
- ManifestSignedXml.cs
- HttpModulesSection.cs
- BindingGroup.cs
- _ScatterGatherBuffers.cs