Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- MessageCredentialType.cs
- IOException.cs
- ProcessThread.cs
- JsonFormatMapping.cs
- VisualTreeHelper.cs
- NavigateEvent.cs
- XslException.cs
- CannotUnloadAppDomainException.cs
- SignatureToken.cs
- Hyperlink.cs
- SQLDoubleStorage.cs
- GenericXmlSecurityToken.cs
- XhtmlConformanceSection.cs
- RemoteCryptoTokenProvider.cs
- LZCodec.cs
- Lease.cs
- ActivityTypeCodeDomSerializer.cs
- XmlNodeComparer.cs
- ProtocolInformationReader.cs
- TypeBuilder.cs
- AssemblyInfo.cs
- RouteItem.cs
- MtomMessageEncoder.cs
- StyleSheetDesigner.cs
- UnmanagedMemoryStreamWrapper.cs
- ControlBuilderAttribute.cs
- SID.cs
- Evidence.cs
- GridViewRowCollection.cs
- GridView.cs
- PriorityQueue.cs
- WebEvents.cs
- VisualBrush.cs
- DuplicateDetector.cs
- EventItfInfo.cs
- UnicodeEncoding.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- WebReferencesBuildProvider.cs
- ForAllOperator.cs
- Point.cs
- ViewStateModeByIdAttribute.cs
- PersonalizationStateQuery.cs
- RSACryptoServiceProvider.cs
- SHA1.cs
- StackOverflowException.cs
- Int16Animation.cs
- DbProviderFactories.cs
- PolicyLevel.cs
- ColorConvertedBitmapExtension.cs
- NonVisualControlAttribute.cs
- RightsManagementPermission.cs
- StandardMenuStripVerb.cs
- DataPagerFieldCommandEventArgs.cs
- SchemaMapping.cs
- HtmlTableCellCollection.cs
- SystemIPGlobalStatistics.cs
- BufferedWebEventProvider.cs
- CalendarButton.cs
- ProtocolsConfiguration.cs
- AppDomain.cs
- PagedDataSource.cs
- PageThemeCodeDomTreeGenerator.cs
- SecurityElement.cs
- LinqDataSourceStatusEventArgs.cs
- SystemSounds.cs
- ExpressionBuilderCollection.cs
- CertificateManager.cs
- HelpKeywordAttribute.cs
- Variant.cs
- TimeSpanOrInfiniteConverter.cs
- ResourcesBuildProvider.cs
- SmiContext.cs
- TraceSource.cs
- Compiler.cs
- BulletedListDesigner.cs
- TemplateFactory.cs
- IsolatedStoragePermission.cs
- DynamicDataManager.cs
- ExtendedPropertiesHandler.cs
- SqlMethods.cs
- FilteredXmlReader.cs
- Regex.cs
- NoPersistProperty.cs
- ExtractedStateEntry.cs
- PhysicalOps.cs
- MergeFilterQuery.cs
- XmlSchemaObjectCollection.cs
- CachedFontFace.cs
- SaveFileDialogDesigner.cs
- ToolStripDropDownClosingEventArgs.cs
- NumberEdit.cs
- CriticalHandle.cs
- SelectionPattern.cs
- CdpEqualityComparer.cs
- RuleSettings.cs
- RowBinding.cs
- RegistrationServices.cs
- SqlConnection.cs
- SafeNativeMethods.cs
- SafeFileMappingHandle.cs