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
- LoopExpression.cs
- ListBoxItem.cs
- XMLSyntaxException.cs
- PackageRelationshipCollection.cs
- WebPartManager.cs
- ManagementQuery.cs
- MethodExpr.cs
- IntSecurity.cs
- _NetworkingPerfCounters.cs
- ComEventsHelper.cs
- PropertyFilterAttribute.cs
- SurrogateEncoder.cs
- ApplicationDirectory.cs
- ProgressBarAutomationPeer.cs
- QualifiedCellIdBoolean.cs
- OdbcException.cs
- XhtmlTextWriter.cs
- WsdlBuildProvider.cs
- SQLString.cs
- ExponentialEase.cs
- XmlSchemaAnnotated.cs
- TempFiles.cs
- StateInitializationDesigner.cs
- ApplicationSettingsBase.cs
- StateMachineHelpers.cs
- FrameworkElement.cs
- Typeface.cs
- LabelDesigner.cs
- RawStylusInputCustomData.cs
- ListViewGroupConverter.cs
- EventTrigger.cs
- ResourcesBuildProvider.cs
- AutomationAttributeInfo.cs
- MatrixIndependentAnimationStorage.cs
- PrivateFontCollection.cs
- PointLightBase.cs
- DataGridColumnReorderingEventArgs.cs
- EntityContainerEmitter.cs
- DataListItemCollection.cs
- XmlSchemaObjectCollection.cs
- EntityClassGenerator.cs
- TypeDescriptionProvider.cs
- Main.cs
- BaseCodeDomTreeGenerator.cs
- StylusButton.cs
- SafeLocalMemHandle.cs
- MethodCallTranslator.cs
- TreeNodeMouseHoverEvent.cs
- URIFormatException.cs
- SendMessageChannelCache.cs
- OdbcException.cs
- WorkflowDefinitionDispenser.cs
- MsiStyleLogWriter.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- TokenBasedSetEnumerator.cs
- WindowsAltTab.cs
- GrammarBuilderPhrase.cs
- XdrBuilder.cs
- QueryAccessibilityHelpEvent.cs
- CheckoutException.cs
- XmlSchemaComplexType.cs
- ClientEndpointLoader.cs
- FixedSchema.cs
- TrustLevelCollection.cs
- SiteMap.cs
- EncryptedData.cs
- MultipleViewPattern.cs
- ConnectionPoolManager.cs
- FilteredSchemaElementLookUpTable.cs
- UdpContractFilterBehavior.cs
- CuspData.cs
- __FastResourceComparer.cs
- BuilderPropertyEntry.cs
- SQLString.cs
- WebPartMovingEventArgs.cs
- AnonymousIdentificationModule.cs
- InlineCollection.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- TabPanel.cs
- Rect.cs
- CodeGenerator.cs
- DataControlImageButton.cs
- DashStyle.cs
- BrowserCapabilitiesFactory.cs
- SamlConstants.cs
- RegisteredScript.cs
- RegexWriter.cs
- DocumentPageView.cs
- OleDbReferenceCollection.cs
- ConnectionManagementSection.cs
- XNameTypeConverter.cs
- TaiwanCalendar.cs
- SpecularMaterial.cs
- QueryTask.cs
- ChangeBlockUndoRecord.cs
- EventLogPermission.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- ResolveCompletedEventArgs.cs
- SerialPinChanges.cs
- PresentationTraceSources.cs