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
- XmlILOptimizerVisitor.cs
- NamespaceInfo.cs
- ExtendedProtectionPolicy.cs
- RequestCachingSection.cs
- SapiRecognizer.cs
- SafeFileMappingHandle.cs
- COM2AboutBoxPropertyDescriptor.cs
- TriState.cs
- XmlSerializer.cs
- CqlLexerHelpers.cs
- EventBookmark.cs
- ChtmlCalendarAdapter.cs
- XmlSchemas.cs
- ExpressionConverter.cs
- controlskin.cs
- CloudCollection.cs
- Encoding.cs
- Assembly.cs
- TextServicesProperty.cs
- PathFigureCollectionConverter.cs
- _NegotiateClient.cs
- XPathDocumentBuilder.cs
- DbProviderServices.cs
- XmlWrappingWriter.cs
- ClientData.cs
- SimpleRecyclingCache.cs
- ServicePoint.cs
- DataTableNewRowEvent.cs
- MenuItem.cs
- FunctionImportMapping.ReturnTypeRenameMapping.cs
- UserUseLicenseDictionaryLoader.cs
- ColorKeyFrameCollection.cs
- Calendar.cs
- DataBoundControlParameterTarget.cs
- mediapermission.cs
- LocatorPartList.cs
- FlowDocumentFormatter.cs
- AbstractDataSvcMapFileLoader.cs
- PtsContext.cs
- LocationFactory.cs
- ConnectionStringsExpressionBuilder.cs
- ErrorRuntimeConfig.cs
- TextServicesPropertyRanges.cs
- UnaryNode.cs
- InputDevice.cs
- DataRecordInternal.cs
- XmlObjectSerializerContext.cs
- CodeSubDirectoriesCollection.cs
- XmlWriter.cs
- DirectoryGroupQuery.cs
- PolicyStatement.cs
- FilterEventArgs.cs
- VisualStates.cs
- ColumnHeader.cs
- ThrowHelper.cs
- Application.cs
- CookieHandler.cs
- StatusBar.cs
- odbcmetadatafactory.cs
- HtmlShim.cs
- QuaternionKeyFrameCollection.cs
- NetStream.cs
- ScrollItemPattern.cs
- CompilationLock.cs
- DataFieldConverter.cs
- ToolStripDesignerUtils.cs
- Fault.cs
- GlyphShapingProperties.cs
- SqlDataSourceFilteringEventArgs.cs
- FieldTemplateFactory.cs
- FontInfo.cs
- Paragraph.cs
- SafeRightsManagementEnvironmentHandle.cs
- HttpHandlersSection.cs
- NullReferenceException.cs
- SqlSelectStatement.cs
- DateTimeConstantAttribute.cs
- ReaderWriterLockWrapper.cs
- GridViewDeletedEventArgs.cs
- ContextBase.cs
- SQLMembershipProvider.cs
- XmlSchemaCompilationSettings.cs
- FormsIdentity.cs
- KeyMatchBuilder.cs
- TypeUtil.cs
- TreeIterator.cs
- TypeReference.cs
- sqlser.cs
- SqlLiftWhereClauses.cs
- ListBase.cs
- XmlElementElement.cs
- mediaeventargs.cs
- Convert.cs
- ErrorTableItemStyle.cs
- XmlUtf8RawTextWriter.cs
- Application.cs
- ResizeGrip.cs
- HtmlTitle.cs
- _ProxyChain.cs
- PropertyPath.cs