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
- PartitionedStream.cs
- LogFlushAsyncResult.cs
- SerializeAbsoluteContext.cs
- DataGridBoolColumn.cs
- TypedReference.cs
- TextProperties.cs
- MobileControlBuilder.cs
- SourceElementsCollection.cs
- DataGridState.cs
- MDIWindowDialog.cs
- SortQuery.cs
- OdbcRowUpdatingEvent.cs
- AsymmetricKeyExchangeDeformatter.cs
- Html32TextWriter.cs
- AsyncCompletedEventArgs.cs
- CommandBinding.cs
- FileDataSourceCache.cs
- PropertyBuilder.cs
- UpdateProgress.cs
- CallSiteOps.cs
- CompilerErrorCollection.cs
- parserscommon.cs
- FreezableDefaultValueFactory.cs
- ProviderException.cs
- LogLogRecordEnumerator.cs
- InfoCardSymmetricAlgorithm.cs
- PipelineModuleStepContainer.cs
- CommonXSendMessage.cs
- FontWeight.cs
- SafeLibraryHandle.cs
- ProcessThread.cs
- WeakReferenceList.cs
- GridViewCancelEditEventArgs.cs
- DataViewListener.cs
- XslTransformFileEditor.cs
- PersonalizableTypeEntry.cs
- HtmlElementEventArgs.cs
- LineGeometry.cs
- CellLabel.cs
- UpdateCommand.cs
- PeerDefaultCustomResolverClient.cs
- EventSetterHandlerConverter.cs
- ReceiveErrorHandling.cs
- Pkcs9Attribute.cs
- SerializationException.cs
- TextBoxBase.cs
- QueryReaderSettings.cs
- HostingPreferredMapPath.cs
- TextAdaptor.cs
- Adorner.cs
- BitArray.cs
- Operator.cs
- RealProxy.cs
- SizeLimitedCache.cs
- DataChangedEventManager.cs
- PreviewKeyDownEventArgs.cs
- Thumb.cs
- LookupBindingPropertiesAttribute.cs
- RegexCompiler.cs
- TextServicesManager.cs
- RoleGroupCollectionEditor.cs
- _AutoWebProxyScriptEngine.cs
- SettingsBase.cs
- DataKey.cs
- IndicShape.cs
- WorkflowStateRollbackService.cs
- CodeValidator.cs
- BooleanKeyFrameCollection.cs
- FormsIdentity.cs
- SynchronizationHandlesCodeDomSerializer.cs
- ProgressBarBrushConverter.cs
- CngProperty.cs
- FontFamily.cs
- BufferedGraphics.cs
- WorkflowRuntimeServiceElementCollection.cs
- LambdaValue.cs
- ColumnMapCopier.cs
- ConnectivityStatus.cs
- MsmqTransportReceiveParameters.cs
- LogEntryHeaderv1Deserializer.cs
- ImageListStreamer.cs
- unsafenativemethodsother.cs
- XmlValidatingReader.cs
- StateItem.cs
- RenderDataDrawingContext.cs
- FontSource.cs
- BrowserDefinition.cs
- MenuItemBindingCollection.cs
- ProfileService.cs
- FileSecurity.cs
- HttpListenerRequest.cs
- CustomAttributeSerializer.cs
- ProfileSection.cs
- VirtualizingPanel.cs
- CqlIdentifiers.cs
- ToolStripItemImageRenderEventArgs.cs
- SafeNativeMemoryHandle.cs
- SqlVersion.cs
- mediaclock.cs
- ClientSideQueueItem.cs