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
- XamlParser.cs
- DynamicResourceExtension.cs
- HyperLinkDataBindingHandler.cs
- AssemblyNameProxy.cs
- PrintDialog.cs
- FontWeights.cs
- ExpressionBuilderContext.cs
- SessionStateItemCollection.cs
- SmiEventSink_Default.cs
- ColorComboBox.cs
- WebBrowserBase.cs
- UnSafeCharBuffer.cs
- SqlCacheDependency.cs
- AttributeTable.cs
- ConsumerConnectionPointCollection.cs
- InheritedPropertyDescriptor.cs
- MemberMemberBinding.cs
- CodeValidator.cs
- SchemaTableOptionalColumn.cs
- WbemProvider.cs
- CodeSnippetStatement.cs
- SkipStoryboardToFill.cs
- ExtensibleClassFactory.cs
- DebugTrace.cs
- StreamResourceInfo.cs
- QilChoice.cs
- DocumentSchemaValidator.cs
- Soap.cs
- ConfigurationElement.cs
- Vector.cs
- EntryWrittenEventArgs.cs
- SymbolMethod.cs
- SessionStateModule.cs
- ResourceManagerWrapper.cs
- AuthenticationService.cs
- ArrayHelper.cs
- SqlTransaction.cs
- CheckBox.cs
- DeploymentSection.cs
- BindingNavigator.cs
- DatagramAdapter.cs
- BasicDesignerLoader.cs
- XmlCodeExporter.cs
- DeflateStreamAsyncResult.cs
- OverlappedAsyncResult.cs
- CodeAttributeDeclarationCollection.cs
- SchemaElement.cs
- KeyPullup.cs
- CngKeyBlobFormat.cs
- RegisterInfo.cs
- AgileSafeNativeMemoryHandle.cs
- RenderingBiasValidation.cs
- ValueExpressions.cs
- UnorderedHashRepartitionStream.cs
- WindowsFont.cs
- XmlComment.cs
- NumberAction.cs
- WebPartHelpVerb.cs
- TypeBinaryExpression.cs
- PhonemeEventArgs.cs
- PublishLicense.cs
- ByteKeyFrameCollection.cs
- LongPath.cs
- SchemaElementLookUpTableEnumerator.cs
- GridSplitterAutomationPeer.cs
- tooltip.cs
- ConfigWriter.cs
- HttpStaticObjectsCollectionBase.cs
- BaseTemplateBuildProvider.cs
- ComponentCache.cs
- HashCodeCombiner.cs
- DataBindingCollection.cs
- SHA1.cs
- PersonalizableAttribute.cs
- WebPartTransformerCollection.cs
- GroupDescription.cs
- EventArgs.cs
- EntityConnection.cs
- EmptyControlCollection.cs
- UniqueIdentifierService.cs
- GenericsInstances.cs
- ReturnEventArgs.cs
- xdrvalidator.cs
- MarkupWriter.cs
- SqlTrackingQuery.cs
- Attributes.cs
- DocumentViewerHelper.cs
- HashCodeCombiner.cs
- Vector3D.cs
- RightsManagementEncryptionTransform.cs
- LeaseManager.cs
- Triplet.cs
- XDeferredAxisSource.cs
- ExtendedPropertyDescriptor.cs
- ViewCellSlot.cs
- PhoneCall.cs
- BitmapEffectInput.cs
- WindowsEditBox.cs
- FunctionParameter.cs
- XamlGridLengthSerializer.cs