Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- OpenTypeLayout.cs
- Hash.cs
- XmlSignificantWhitespace.cs
- SectionUpdates.cs
- WebPartZone.cs
- OraclePermissionAttribute.cs
- CheckBoxField.cs
- PriorityChain.cs
- ServiceChannelManager.cs
- EditorAttributeInfo.cs
- GeneratedContractType.cs
- SQLGuidStorage.cs
- EncryptedReference.cs
- PixelShader.cs
- ReadOnlyCollection.cs
- XsdDateTime.cs
- DbProviderServices.cs
- SymbolTable.cs
- DbParameterHelper.cs
- ContractMapping.cs
- ChannelTerminatedException.cs
- NonVisualControlAttribute.cs
- WCFBuildProvider.cs
- ScrollViewer.cs
- loginstatus.cs
- TypeRestriction.cs
- FrameSecurityDescriptor.cs
- JsonSerializer.cs
- DocumentPageHost.cs
- Operator.cs
- ShapingWorkspace.cs
- WebPartEditorCancelVerb.cs
- EmptyElement.cs
- PermissionSet.cs
- EventSourceCreationData.cs
- ColorContext.cs
- GPPOINTF.cs
- xml.cs
- DbConnectionPoolGroup.cs
- IntSecurity.cs
- CompoundFileStreamReference.cs
- HtmlLiteralTextAdapter.cs
- PersistChildrenAttribute.cs
- SymbolType.cs
- MatrixUtil.cs
- XmlEnumAttribute.cs
- Graphics.cs
- OdbcException.cs
- SafeEventLogWriteHandle.cs
- Collection.cs
- storepermissionattribute.cs
- MouseButton.cs
- ScriptReferenceBase.cs
- StackBuilderSink.cs
- MenuItemCollectionEditorDialog.cs
- SQLInt32Storage.cs
- PropertyConverter.cs
- XmlUtilWriter.cs
- BatchParser.cs
- BinaryMethodMessage.cs
- ServiceBehaviorElement.cs
- DependencyObjectCodeDomSerializer.cs
- InstancePersistenceException.cs
- AuthenticationModuleElementCollection.cs
- ObjectManager.cs
- TextPatternIdentifiers.cs
- TriggerBase.cs
- ArrangedElementCollection.cs
- HMACSHA1.cs
- SchemaName.cs
- Monitor.cs
- LinearGradientBrush.cs
- BamlLocalizationDictionary.cs
- MaxMessageSizeStream.cs
- ButtonRenderer.cs
- XmlTextReaderImpl.cs
- SmtpMail.cs
- HyperlinkAutomationPeer.cs
- HtmlTableCell.cs
- ExtensionQuery.cs
- DesignerOptionService.cs
- DataBindingExpressionBuilder.cs
- TypeSource.cs
- ToolStripDropDown.cs
- StringValueSerializer.cs
- ConnectionsZone.cs
- XsdDuration.cs
- PriorityQueue.cs
- RouteParameter.cs
- ServiceHttpModule.cs
- SignedPkcs7.cs
- CssTextWriter.cs
- DataGridViewCellEventArgs.cs
- DecoratedNameAttribute.cs
- ReadOnlyCollectionBase.cs
- UrlPath.cs
- ContractComponent.cs
- DependencyObjectValidator.cs
- ContentPlaceHolder.cs
- NonParentingControl.cs