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
- AssertFilter.cs
- ECDsa.cs
- ScopelessEnumAttribute.cs
- Point3DCollectionConverter.cs
- DetailsViewInsertedEventArgs.cs
- CompilationPass2Task.cs
- ContractMapping.cs
- ReliableSessionElement.cs
- ACL.cs
- WebBrowserContainer.cs
- WebPartMenu.cs
- SystemPens.cs
- WrappedReader.cs
- XmlNode.cs
- BinHexDecoder.cs
- AnimationClock.cs
- FixedTextSelectionProcessor.cs
- TextTabProperties.cs
- ProvidersHelper.cs
- CompatibleComparer.cs
- ValueTable.cs
- DebugView.cs
- SpotLight.cs
- BrowserCapabilitiesCompiler.cs
- DataSvcMapFile.cs
- DependencyObjectPropertyDescriptor.cs
- CompositeControlDesigner.cs
- ITreeGenerator.cs
- ModuleBuilderData.cs
- SmuggledIUnknown.cs
- GestureRecognizer.cs
- OrderPreservingPipeliningSpoolingTask.cs
- FilterElement.cs
- DocumentOutline.cs
- RNGCryptoServiceProvider.cs
- SqlErrorCollection.cs
- SessionIDManager.cs
- XhtmlConformanceSection.cs
- FieldToken.cs
- Rectangle.cs
- SoapAttributes.cs
- EntityKeyElement.cs
- ChannelAcceptor.cs
- MSHTMLHostUtil.cs
- Style.cs
- SqlCommandSet.cs
- DataRowView.cs
- BitHelper.cs
- ProfileManager.cs
- ZipArchive.cs
- Token.cs
- TimersDescriptionAttribute.cs
- AccessDataSource.cs
- CommandLibraryHelper.cs
- _SpnDictionary.cs
- WebContentFormatHelper.cs
- BindingsCollection.cs
- DesignerOptionService.cs
- safemediahandle.cs
- DataServiceKeyAttribute.cs
- TextBoxAutoCompleteSourceConverter.cs
- WebAdminConfigurationHelper.cs
- SHA1Cng.cs
- NetMsmqBindingElement.cs
- ExtentKey.cs
- TextElement.cs
- LinkButton.cs
- OperandQuery.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- BitmapEffectState.cs
- X509ClientCertificateAuthenticationElement.cs
- KeyboardNavigation.cs
- ButtonBaseAutomationPeer.cs
- RoutedEvent.cs
- KnownTypesHelper.cs
- TypeDelegator.cs
- MultiBinding.cs
- ResolveNameEventArgs.cs
- DataControlFieldHeaderCell.cs
- EventToken.cs
- RootBuilder.cs
- FormView.cs
- QuaternionValueSerializer.cs
- FormViewDesigner.cs
- BitStream.cs
- TreeView.cs
- FormViewUpdatedEventArgs.cs
- ErrorHandlerFaultInfo.cs
- DataViewListener.cs
- AsymmetricSignatureFormatter.cs
- AssemblyName.cs
- NonClientArea.cs
- BoundField.cs
- Base64Stream.cs
- ADMembershipUser.cs
- XmlnsDefinitionAttribute.cs
- CollectionDataContract.cs
- HideDisabledControlAdapter.cs
- TextBox.cs
- HttpServerChannel.cs