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
- DiscoveryMessageSequence.cs
- HttpModuleCollection.cs
- OdbcConnectionOpen.cs
- ArrayWithOffset.cs
- RuntimeConfigurationRecord.cs
- Component.cs
- TreeViewAutomationPeer.cs
- ObjectCacheHost.cs
- GeneralTransformCollection.cs
- MLangCodePageEncoding.cs
- NameScopePropertyAttribute.cs
- CharacterBuffer.cs
- XPathBinder.cs
- AVElementHelper.cs
- TypeUnloadedException.cs
- IItemProperties.cs
- MSAANativeProvider.cs
- TargetPerspective.cs
- BodyGlyph.cs
- QueryableDataSourceEditData.cs
- DictionarySectionHandler.cs
- XmlSequenceWriter.cs
- DataGridViewEditingControlShowingEventArgs.cs
- IDQuery.cs
- BinaryNode.cs
- AvTrace.cs
- AlphabetConverter.cs
- PaperSize.cs
- RadioButton.cs
- WindowsSysHeader.cs
- JournalEntryStack.cs
- OdbcTransaction.cs
- PrintDialog.cs
- ContainerParaClient.cs
- MemberCollection.cs
- CurrencyWrapper.cs
- DataSourceCollectionBase.cs
- CodeDirectiveCollection.cs
- MouseEvent.cs
- RectangleHotSpot.cs
- RelationshipWrapper.cs
- CancellationTokenRegistration.cs
- TextProperties.cs
- NumericUpDownAcceleration.cs
- StrokeNodeData.cs
- SignatureToken.cs
- HelpOperationInvoker.cs
- FamilyCollection.cs
- InputElement.cs
- DefaultHttpHandler.cs
- QueryAsyncResult.cs
- GridItemPattern.cs
- DataControlButton.cs
- SimpleRecyclingCache.cs
- ClientTarget.cs
- XmlSchemaSimpleTypeUnion.cs
- GlobalizationSection.cs
- Range.cs
- HtmlContainerControl.cs
- OutputCacheProfileCollection.cs
- HtmlInputFile.cs
- GroupedContextMenuStrip.cs
- GradientStopCollection.cs
- TreeViewImageIndexConverter.cs
- OledbConnectionStringbuilder.cs
- SoapFault.cs
- PointConverter.cs
- PointCollectionConverter.cs
- UniqueConstraint.cs
- ConstructorBuilder.cs
- ProcessProtocolHandler.cs
- SrgsOneOf.cs
- CodeSubDirectory.cs
- _ConnectStream.cs
- TcpAppDomainProtocolHandler.cs
- Button.cs
- DataViewSettingCollection.cs
- PolicyManager.cs
- IndexerHelper.cs
- StylusPointPropertyInfoDefaults.cs
- BuildResult.cs
- StateBag.cs
- Page.cs
- BitConverter.cs
- DirectoryRootQuery.cs
- ExpandSegmentCollection.cs
- RegionIterator.cs
- SoapEnumAttribute.cs
- TypeHelper.cs
- PointIndependentAnimationStorage.cs
- GenericRootAutomationPeer.cs
- ValidationError.cs
- PropertyEntry.cs
- WindowsIdentity.cs
- BlockCollection.cs
- AspNetSynchronizationContext.cs
- DefaultSerializationProviderAttribute.cs
- FrameworkContentElement.cs
- HttpProcessUtility.cs
- DataView.cs