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
- VisualCollection.cs
- SizeConverter.cs
- IRCollection.cs
- OutOfProcStateClientManager.cs
- SynchronizedMessageSource.cs
- WebPartConnectionsCancelEventArgs.cs
- ChangePasswordDesigner.cs
- MonitoringDescriptionAttribute.cs
- SafeSecurityHelper.cs
- CommonObjectSecurity.cs
- DependentList.cs
- EventLogLink.cs
- XmlElementList.cs
- AddingNewEventArgs.cs
- WindowsRichEdit.cs
- InternalConfigHost.cs
- HttpRuntimeSection.cs
- PingOptions.cs
- GetPageCompletedEventArgs.cs
- XmlSchemaAttribute.cs
- TextControlDesigner.cs
- NameValuePermission.cs
- Int32Rect.cs
- SmiEventStream.cs
- CollectionViewGroupRoot.cs
- CompositeActivityTypeDescriptorProvider.cs
- ILGenerator.cs
- HttpPostProtocolReflector.cs
- DelayedRegex.cs
- ConditionCollection.cs
- GradientSpreadMethodValidation.cs
- WindowsIPAddress.cs
- Win32Native.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- Color.cs
- ValueUnavailableException.cs
- EncryptedPackage.cs
- SafeProcessHandle.cs
- FixedPage.cs
- RuleSetCollection.cs
- EventBuilder.cs
- PlatformCulture.cs
- PackageDigitalSignatureManager.cs
- MetaModel.cs
- DbRetry.cs
- WinOEToolBoxItem.cs
- Line.cs
- SafeNativeMethods.cs
- ApplicationInfo.cs
- OleDbPermission.cs
- TemplatedMailWebEventProvider.cs
- TcpServerChannel.cs
- MetricEntry.cs
- ControlTemplate.cs
- TextContainerChangeEventArgs.cs
- EmptyImpersonationContext.cs
- HttpModuleCollection.cs
- RowToParametersTransformer.cs
- SqlUDTStorage.cs
- _NtlmClient.cs
- ToggleButtonAutomationPeer.cs
- SchemaCompiler.cs
- DataGridViewTopLeftHeaderCell.cs
- BindingParameterCollection.cs
- KeyManager.cs
- PublisherIdentityPermission.cs
- CollectionsUtil.cs
- XmlSchemaImport.cs
- WebPartConnectVerb.cs
- HostedNamedPipeTransportManager.cs
- InnerItemCollectionView.cs
- isolationinterop.cs
- ObjectDataSource.cs
- SoapReflectionImporter.cs
- Renderer.cs
- MetaTableHelper.cs
- QueryOptionExpression.cs
- OutputCacheProfileCollection.cs
- ObjectAnimationUsingKeyFrames.cs
- Preprocessor.cs
- CacheAxisQuery.cs
- XmlFormatExtensionPointAttribute.cs
- InheritanceAttribute.cs
- Speller.cs
- VisualBrush.cs
- MeasureItemEvent.cs
- XmlSchemaExporter.cs
- ConditionCollection.cs
- PaperSource.cs
- InvalidProgramException.cs
- LostFocusEventManager.cs
- QueryCacheKey.cs
- TextSelectionHighlightLayer.cs
- DbConnectionPoolCounters.cs
- FormsAuthenticationCredentials.cs
- TypeToken.cs
- StaticTextPointer.cs
- Command.cs
- HttpDebugHandler.cs
- BufferedWebEventProvider.cs