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
- KeySplineConverter.cs
- HttpListenerRequestUriBuilder.cs
- ResourceBinder.cs
- RestClientProxyHandler.cs
- UdpChannelFactory.cs
- DefaultObjectMappingItemCollection.cs
- XmlSchemaExporter.cs
- BrowserTree.cs
- SettingsAttributeDictionary.cs
- CodeConditionStatement.cs
- ServiceHostFactory.cs
- XmlPreloadedResolver.cs
- FontDifferentiator.cs
- ISessionStateStore.cs
- SemaphoreSecurity.cs
- FixedSOMTextRun.cs
- UnsafeNativeMethods.cs
- DesignerTransactionCloseEvent.cs
- EntityContainer.cs
- URI.cs
- DbDataReader.cs
- AsymmetricAlgorithm.cs
- ListViewGroupItemCollection.cs
- StringConverter.cs
- SecurityKeyIdentifierClause.cs
- DataListItemCollection.cs
- Classification.cs
- CaseInsensitiveHashCodeProvider.cs
- RectangleConverter.cs
- SqlConnectionFactory.cs
- DragDeltaEventArgs.cs
- RegexEditorDialog.cs
- OleDbEnumerator.cs
- PropertyValue.cs
- WindowProviderWrapper.cs
- MsmqOutputChannel.cs
- Vector3DKeyFrameCollection.cs
- TextWriterTraceListener.cs
- SchemaElementDecl.cs
- TickBar.cs
- DecimalKeyFrameCollection.cs
- WebFormDesignerActionService.cs
- SystemUnicastIPAddressInformation.cs
- TypeConverter.cs
- ContractsBCL.cs
- TextSelectionHighlightLayer.cs
- Math.cs
- BlobPersonalizationState.cs
- GeneralTransform3D.cs
- RuntimeEnvironment.cs
- DesignOnlyAttribute.cs
- QueryOutputWriter.cs
- MailWriter.cs
- RightsManagementErrorHandler.cs
- WindowsTab.cs
- BitmapEffectInput.cs
- DataServiceKeyAttribute.cs
- PersianCalendar.cs
- HMACSHA256.cs
- X509ChainElement.cs
- XmlQueryStaticData.cs
- ResolvedKeyFrameEntry.cs
- ValidationRuleCollection.cs
- OleDbError.cs
- AutomationIdentifier.cs
- LambdaCompiler.cs
- RequestCachePolicy.cs
- SqlConnectionStringBuilder.cs
- AssemblyCache.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- ServiceSecurityAuditElement.cs
- DataColumnPropertyDescriptor.cs
- _DisconnectOverlappedAsyncResult.cs
- DragStartedEventArgs.cs
- ScriptReference.cs
- ApplicationHost.cs
- SearchExpression.cs
- TextTreeUndoUnit.cs
- ServiceModelEnumValidator.cs
- DataChangedEventManager.cs
- InternalCache.cs
- DynamicResourceExtension.cs
- DataGridViewCellEventArgs.cs
- ClassicBorderDecorator.cs
- SkipQueryOptionExpression.cs
- GeometryHitTestResult.cs
- BamlWriter.cs
- ActivityCompletionCallbackWrapper.cs
- EntityViewGenerationAttribute.cs
- XmlSerializerAssemblyAttribute.cs
- SrgsElementList.cs
- SqlCacheDependencyDatabase.cs
- XmlBaseReader.cs
- ScriptRegistrationManager.cs
- CurrencyWrapper.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- MethodExpr.cs
- UseManagedPresentationBindingElementImporter.cs
- METAHEADER.cs
- XPathDocumentIterator.cs