Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- IgnoreSectionHandler.cs
- BitmapEffectCollection.cs
- mediaclock.cs
- Vector3DConverter.cs
- InstanceKeyNotReadyException.cs
- HandlerBase.cs
- BrowserCapabilitiesFactoryBase.cs
- FullTextState.cs
- PostBackOptions.cs
- TextTreeUndoUnit.cs
- EditCommandColumn.cs
- messageonlyhwndwrapper.cs
- CodeTypeParameter.cs
- UnknownBitmapDecoder.cs
- SQLMoneyStorage.cs
- Single.cs
- NodeLabelEditEvent.cs
- SHA384Managed.cs
- BrowserTree.cs
- TextBoxAutomationPeer.cs
- WeakEventTable.cs
- UIElement3D.cs
- SynchronousReceiveElement.cs
- ChangePasswordDesigner.cs
- Int64Animation.cs
- DataGridTextBoxColumn.cs
- SQLDecimalStorage.cs
- BypassElement.cs
- Buffer.cs
- GridViewRow.cs
- BitmapEffect.cs
- CancellationHandler.cs
- DataGridHeaderBorder.cs
- TailCallAnalyzer.cs
- XPathSingletonIterator.cs
- CodeAttributeDeclarationCollection.cs
- Model3DCollection.cs
- ControlBindingsCollection.cs
- AnnotationObservableCollection.cs
- XmlComment.cs
- XmlCharCheckingWriter.cs
- MessageQueueTransaction.cs
- ResourceReferenceKeyNotFoundException.cs
- Path.cs
- Emitter.cs
- MetafileHeaderWmf.cs
- Animatable.cs
- ToolstripProfessionalRenderer.cs
- Image.cs
- NumericUpDown.cs
- DataMember.cs
- MonthChangedEventArgs.cs
- ContractReference.cs
- DoubleLinkList.cs
- ApplyTemplatesAction.cs
- WindowsFormsEditorServiceHelper.cs
- DayRenderEvent.cs
- OletxCommittableTransaction.cs
- SessionPageStateSection.cs
- ReachObjectContext.cs
- HtmlInputText.cs
- _PooledStream.cs
- ImageIndexEditor.cs
- sqlmetadatafactory.cs
- StylusButton.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- GeneralTransformGroup.cs
- XmlSchemaAppInfo.cs
- KeyConverter.cs
- Control.cs
- SHA384.cs
- XamlDesignerSerializationManager.cs
- MediaEntryAttribute.cs
- IdnElement.cs
- EndOfStreamException.cs
- CheckedPointers.cs
- SemanticResultKey.cs
- SystemIPv6InterfaceProperties.cs
- XmlSchemaSimpleTypeUnion.cs
- BitmapEffectDrawing.cs
- AutoGeneratedField.cs
- ModifierKeysValueSerializer.cs
- XD.cs
- _Rfc2616CacheValidators.cs
- SystemUnicastIPAddressInformation.cs
- RequestUriProcessor.cs
- pingexception.cs
- TextSchema.cs
- WebPart.cs
- QuaternionKeyFrameCollection.cs
- DesignBindingPropertyDescriptor.cs
- RequestCacheManager.cs
- XmlSchemaComplexContentExtension.cs
- CopyAction.cs
- TripleDES.cs
- TypedDatasetGenerator.cs
- HttpHandlersSection.cs
- COM2IProvidePropertyBuilderHandler.cs
- XmlToDatasetMap.cs
- LeafCellTreeNode.cs