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
- CodeExpressionStatement.cs
- CodeTypeDelegate.cs
- RepeaterCommandEventArgs.cs
- ControlBindingsCollection.cs
- ItemList.cs
- FilteredAttributeCollection.cs
- PeerTransportBindingElement.cs
- TableLayout.cs
- RestClientProxyHandler.cs
- Vector3DConverter.cs
- MarshalByRefObject.cs
- NonBatchDirectoryCompiler.cs
- OleDbFactory.cs
- CompensationTokenData.cs
- CodeExporter.cs
- AuthenticationManager.cs
- DocumentReference.cs
- LocalIdKeyIdentifierClause.cs
- SyndicationContent.cs
- HostingPreferredMapPath.cs
- Cursors.cs
- DocumentCollection.cs
- Stylesheet.cs
- EventHandlersStore.cs
- ProfileGroupSettingsCollection.cs
- StringDictionaryEditor.cs
- OptimalTextSource.cs
- XmlChoiceIdentifierAttribute.cs
- StrokeNodeOperations.cs
- DatatypeImplementation.cs
- Utils.cs
- FileDialogCustomPlace.cs
- WindowsFormsHostAutomationPeer.cs
- SymbolDocumentInfo.cs
- UrlPropertyAttribute.cs
- ValueUnavailableException.cs
- XmlTextWriter.cs
- RootProfilePropertySettingsCollection.cs
- BCryptNative.cs
- MessageSecurityOverHttpElement.cs
- TypeSystem.cs
- ComboBoxHelper.cs
- UriTemplateVariableQueryValue.cs
- WeakReference.cs
- LambdaCompiler.ControlFlow.cs
- SystemResourceHost.cs
- ResizingMessageFilter.cs
- TypeDescriptor.cs
- XNameTypeConverter.cs
- UserControlFileEditor.cs
- RestrictedTransactionalPackage.cs
- StringKeyFrameCollection.cs
- EventWaitHandleSecurity.cs
- CompoundFileStreamReference.cs
- CachingHintValidation.cs
- BaseDataList.cs
- UMPAttributes.cs
- _emptywebproxy.cs
- SiteIdentityPermission.cs
- PackageController.cs
- Freezable.cs
- invalidudtexception.cs
- XmlLanguageConverter.cs
- XmlBindingWorker.cs
- Matrix3D.cs
- ServiceHostFactory.cs
- BlurEffect.cs
- WithStatement.cs
- CalendarData.cs
- ReceiveMessageRecord.cs
- SessionPageStateSection.cs
- HijriCalendar.cs
- MetaChildrenColumn.cs
- XslAstAnalyzer.cs
- SerializationEventsCache.cs
- securitycriticaldataformultiplegetandset.cs
- CodeExpressionStatement.cs
- Win32.cs
- OleDbMetaDataFactory.cs
- DiffuseMaterial.cs
- BamlCollectionHolder.cs
- TrackPoint.cs
- SerializationAttributes.cs
- Double.cs
- DataServiceConfiguration.cs
- Span.cs
- HttpModuleActionCollection.cs
- TraceUtility.cs
- EntityContainer.cs
- PageStatePersister.cs
- CapacityStreamGeometryContext.cs
- securitycriticaldataformultiplegetandset.cs
- DataGridViewAddColumnDialog.cs
- SectionUpdates.cs
- GridViewColumn.cs
- SafeNativeMethods.cs
- externdll.cs
- SqlRowUpdatedEvent.cs
- GeometryGroup.cs
- Connector.xaml.cs