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
- TextRangeEditTables.cs
- keycontainerpermission.cs
- RoutingSection.cs
- SerializationSectionGroup.cs
- TextTrailingWordEllipsis.cs
- QualifierSet.cs
- JsonDeserializer.cs
- ArrayElementGridEntry.cs
- DeadCharTextComposition.cs
- ChangePassword.cs
- XPathDescendantIterator.cs
- TaskFormBase.cs
- NegationPusher.cs
- QueryConverter.cs
- XamlToRtfWriter.cs
- NominalTypeEliminator.cs
- StreamSecurityUpgradeInitiator.cs
- MimeObjectFactory.cs
- DocumentOrderQuery.cs
- ISAPIApplicationHost.cs
- GlyphRun.cs
- UIInitializationException.cs
- ReferencedCollectionType.cs
- ValidationSummary.cs
- EventListener.cs
- Thumb.cs
- RefreshPropertiesAttribute.cs
- XmlHierarchicalEnumerable.cs
- PrimitiveXmlSerializers.cs
- ToolStripItemRenderEventArgs.cs
- ToolStripTextBox.cs
- SessionState.cs
- LicenseProviderAttribute.cs
- CacheDependency.cs
- ArrangedElement.cs
- _ShellExpression.cs
- DBCommand.cs
- ListenerConstants.cs
- UIPropertyMetadata.cs
- RuleInfoComparer.cs
- MultiPropertyDescriptorGridEntry.cs
- SQLRoleProvider.cs
- DbParameterCollection.cs
- HttpWebRequest.cs
- EntityProviderServices.cs
- EnumConverter.cs
- HostedHttpContext.cs
- GridViewAutoFormat.cs
- DataGridAutomationPeer.cs
- SessionSwitchEventArgs.cs
- WmlSelectionListAdapter.cs
- OracleDataReader.cs
- CommandHelpers.cs
- InvalidWMPVersionException.cs
- _ProxyChain.cs
- panel.cs
- BamlRecordHelper.cs
- MultipleViewProviderWrapper.cs
- ValidationPropertyAttribute.cs
- Visual3D.cs
- StopStoryboard.cs
- SafeProcessHandle.cs
- ConfigXmlComment.cs
- ApplicationId.cs
- IndexOutOfRangeException.cs
- ObjectSet.cs
- BoundColumn.cs
- ToolStripContentPanel.cs
- NativeMethods.cs
- OleDbEnumerator.cs
- FactoryGenerator.cs
- HGlobalSafeHandle.cs
- InvalidateEvent.cs
- ServicePointManager.cs
- CqlGenerator.cs
- DateTimeOffsetConverter.cs
- Validator.cs
- ManipulationLogic.cs
- ConfigurationSettings.cs
- AttributeSetAction.cs
- Model3DGroup.cs
- AvTrace.cs
- ActivationArguments.cs
- XPathItem.cs
- XmlText.cs
- ServiceChannel.cs
- MemberRelationshipService.cs
- DesignerAutoFormatCollection.cs
- BadImageFormatException.cs
- _AutoWebProxyScriptWrapper.cs
- AppModelKnownContentFactory.cs
- RelatedPropertyManager.cs
- ArraySegment.cs
- IdentityReference.cs
- SQLGuidStorage.cs
- AnnotationResourceCollection.cs
- NamedPipeWorkerProcess.cs
- Button.cs
- PassportIdentity.cs
- VisualStyleInformation.cs