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
- RenderData.cs
- MessageSmuggler.cs
- PrePostDescendentsWalker.cs
- XmlNodeChangedEventArgs.cs
- CodeMethodInvokeExpression.cs
- RequestNavigateEventArgs.cs
- ListViewInsertionMark.cs
- ILGenerator.cs
- TemplateBindingExtension.cs
- SoapInteropTypes.cs
- RightNameExpirationInfoPair.cs
- precedingquery.cs
- DispatcherFrame.cs
- SortedList.cs
- SinglePageViewer.cs
- ProtocolElement.cs
- BooleanFacetDescriptionElement.cs
- CollectionMarkupSerializer.cs
- Control.cs
- ResXResourceSet.cs
- TokenFactoryBase.cs
- CachedBitmap.cs
- PrefixQName.cs
- JobCollate.cs
- StreamWriter.cs
- SqlPersonalizationProvider.cs
- DataStreams.cs
- ElementFactory.cs
- XPathChildIterator.cs
- HttpWrapper.cs
- ObjectViewQueryResultData.cs
- XsdCachingReader.cs
- OleTxTransactionInfo.cs
- BlockCollection.cs
- ValueTypeFixupInfo.cs
- DescendantQuery.cs
- SessionStateUtil.cs
- CommunicationObject.cs
- ResourceDefaultValueAttribute.cs
- PointConverter.cs
- SecurityStateEncoder.cs
- PreservationFileWriter.cs
- ProviderIncompatibleException.cs
- EntityUtil.cs
- ConfigViewGenerator.cs
- SchemaContext.cs
- UnmanagedMemoryAccessor.cs
- EmbeddedMailObjectsCollection.cs
- BaseServiceProvider.cs
- Directory.cs
- FileVersion.cs
- EnumType.cs
- Expression.cs
- MatrixTransform3D.cs
- TextSelectionHelper.cs
- HtmlInputPassword.cs
- DBPropSet.cs
- JapaneseLunisolarCalendar.cs
- DocumentGridContextMenu.cs
- VoiceInfo.cs
- DataSourceControlBuilder.cs
- GlyphCache.cs
- Menu.cs
- OutputCacheProfile.cs
- StorageAssociationSetMapping.cs
- PageBuildProvider.cs
- ListSortDescriptionCollection.cs
- Base64Encoder.cs
- XmlRawWriterWrapper.cs
- HMACSHA256.cs
- FontFamilyIdentifier.cs
- BCryptSafeHandles.cs
- PathFigureCollection.cs
- CommandSet.cs
- ForeignConstraint.cs
- Size3D.cs
- ContextProperty.cs
- TemplateControlParser.cs
- TransformCryptoHandle.cs
- COM2IDispatchConverter.cs
- UriWriter.cs
- SupportingTokenProviderSpecification.cs
- StackOverflowException.cs
- ToolBarDesigner.cs
- CollectionChangedEventManager.cs
- DataGridColumnStyleMappingNameEditor.cs
- AggregationMinMaxHelpers.cs
- TextClipboardData.cs
- DeclaredTypeValidator.cs
- _SslStream.cs
- DbProviderManifest.cs
- IResourceProvider.cs
- DeferredReference.cs
- EntityDataSourceQueryBuilder.cs
- BinaryParser.cs
- FrameworkElement.cs
- CodeTypeDelegate.cs
- InkCanvasSelectionAdorner.cs
- InvalidOleVariantTypeException.cs
- HierarchicalDataSourceConverter.cs