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
- ImportOptions.cs
- MethodInfo.cs
- SourceChangedEventArgs.cs
- ICspAsymmetricAlgorithm.cs
- SelectedDatesCollection.cs
- TypeConverterHelper.cs
- Enum.cs
- AsymmetricAlgorithm.cs
- XmlDocumentType.cs
- CodeLabeledStatement.cs
- AQNBuilder.cs
- StrokeNodeEnumerator.cs
- AssemblyBuilder.cs
- UserPreferenceChangedEventArgs.cs
- IdentityValidationException.cs
- DataGridViewCellLinkedList.cs
- SchemaName.cs
- WindowsListViewGroupHelper.cs
- XmlQueryType.cs
- XmlAnyElementAttribute.cs
- ServicesSection.cs
- Inflater.cs
- TextViewSelectionProcessor.cs
- FacetValueContainer.cs
- ExpandableObjectConverter.cs
- RelationshipConstraintValidator.cs
- CustomWebEventKey.cs
- WebDescriptionAttribute.cs
- Content.cs
- TextParagraphCache.cs
- MsmqHostedTransportManager.cs
- BindingOperations.cs
- Region.cs
- PropertyItemInternal.cs
- VarRefManager.cs
- WorkflowItemsPresenter.cs
- DBCommand.cs
- CompositeControl.cs
- MembershipSection.cs
- ToolstripProfessionalRenderer.cs
- Glyph.cs
- XmlReader.cs
- ConstraintEnumerator.cs
- ActivityXRefPropertyEditor.cs
- ObjectDataSource.cs
- FileInfo.cs
- Function.cs
- ArrayTypeMismatchException.cs
- DataGridAutoFormatDialog.cs
- FormView.cs
- AtomEntry.cs
- DataGridComboBoxColumn.cs
- Pool.cs
- EntityDataSourceEntitySetNameItem.cs
- ObfuscationAttribute.cs
- ChangePasswordAutoFormat.cs
- KeyValuePair.cs
- RegistryExceptionHelper.cs
- ModelFunctionTypeElement.cs
- AdRotator.cs
- TailCallAnalyzer.cs
- GroupItemAutomationPeer.cs
- LinqDataSourceContextEventArgs.cs
- GenericXmlSecurityToken.cs
- BitmapEffectInputData.cs
- TdsParserHelperClasses.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- CultureTableRecord.cs
- TransactionsSectionGroup.cs
- UserNameSecurityToken.cs
- SecurityBindingElement.cs
- _NetRes.cs
- Canvas.cs
- HtmlFormParameterWriter.cs
- SimplePropertyEntry.cs
- DbDataSourceEnumerator.cs
- Triplet.cs
- ProtocolsConfiguration.cs
- ConnectionOrientedTransportBindingElement.cs
- AdPostCacheSubstitution.cs
- CanonicalFontFamilyReference.cs
- DebugView.cs
- PassportAuthenticationEventArgs.cs
- DataGridViewCellParsingEventArgs.cs
- XPathAncestorQuery.cs
- InstanceKeyCollisionException.cs
- TakeQueryOptionExpression.cs
- Constants.cs
- TrackBar.cs
- InvokeHandlers.cs
- brushes.cs
- FixedSOMPage.cs
- FontFaceLayoutInfo.cs
- CreateUserErrorEventArgs.cs
- SoapHeaderAttribute.cs
- SettingsBase.cs
- MouseDevice.cs
- XamlTypeMapper.cs
- HGlobalSafeHandle.cs
- AnimationLayer.cs