Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / 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); ItemsControlAutomationPeer itemsControlAP = itemsControl.CreateAutomationPeer() as ItemsControlAutomationPeer; 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
- VideoDrawing.cs
- GridViewSortEventArgs.cs
- SettingsBindableAttribute.cs
- OdbcConnectionFactory.cs
- KeySplineConverter.cs
- SmiSettersStream.cs
- HtmlForm.cs
- Content.cs
- InfoCardSymmetricAlgorithm.cs
- ControlEvent.cs
- SecurityBindingElement.cs
- Window.cs
- XslException.cs
- FileStream.cs
- RequestCacheEntry.cs
- PolicyChain.cs
- SymbolEqualComparer.cs
- ChannelSinkStacks.cs
- IntSecurity.cs
- PrimitiveList.cs
- QueryConverter.cs
- XmlSchemaDocumentation.cs
- CharKeyFrameCollection.cs
- DbMetaDataColumnNames.cs
- OracleParameterCollection.cs
- ComponentEvent.cs
- RegionData.cs
- RunInstallerAttribute.cs
- BooleanStorage.cs
- TcpClientSocketManager.cs
- AuthenticateEventArgs.cs
- TimelineClockCollection.cs
- EntityDataSourceContainerNameItem.cs
- TextParentUndoUnit.cs
- SyndicationFeed.cs
- ConnectionStringSettings.cs
- XmlBaseWriter.cs
- SymbolDocumentGenerator.cs
- ReverseComparer.cs
- ElasticEase.cs
- MutexSecurity.cs
- ObjectViewEntityCollectionData.cs
- SecureEnvironment.cs
- UncommonField.cs
- WindowsButton.cs
- UiaCoreApi.cs
- HandlerMappingMemo.cs
- WebPartDescription.cs
- DBConcurrencyException.cs
- SecurityTokenProvider.cs
- MenuItemStyleCollection.cs
- HyperLinkField.cs
- ConstNode.cs
- HashSetEqualityComparer.cs
- ServicesUtilities.cs
- AssemblyHash.cs
- FormClosingEvent.cs
- StreamMarshaler.cs
- BindingGroup.cs
- CodeGenerator.cs
- DeclaredTypeElementCollection.cs
- GlyphingCache.cs
- MdbDataFileEditor.cs
- ExternalException.cs
- TextServicesCompartmentEventSink.cs
- RenderDataDrawingContext.cs
- FacetValues.cs
- UInt32.cs
- CmsInterop.cs
- WebPartRestoreVerb.cs
- ConnectionConsumerAttribute.cs
- Polygon.cs
- WebPartMinimizeVerb.cs
- TimeSpanOrInfiniteConverter.cs
- BulletChrome.cs
- PropertyDescriptorCollection.cs
- DescendantQuery.cs
- EntityReference.cs
- BaseComponentEditor.cs
- QueryAsyncResult.cs
- SmtpNtlmAuthenticationModule.cs
- SoapAttributes.cs
- MenuItemBinding.cs
- NativeMethods.cs
- XmlCharacterData.cs
- DesignerSerializationVisibilityAttribute.cs
- ConfigXmlComment.cs
- Collection.cs
- TextFormatterHost.cs
- Encoding.cs
- UInt32Converter.cs
- SqlDataSourceQueryEditorForm.cs
- MemoryRecordBuffer.cs
- ValueQuery.cs
- CurrentChangedEventManager.cs
- AspNetHostingPermission.cs
- SimpleTextLine.cs
- XmlSerializableServices.cs
- GridViewCancelEditEventArgs.cs
- ModelTreeEnumerator.cs