Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Automation / Peers / GroupItemAutomationPeer.cs / 1477467 / 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; } /// override protected bool IsOffscreenCore() { if (!Owner.IsVisible) return true; Rect boundingRect = CalculateVisibleBoundingRect(); return (boundingRect == Rect.Empty || boundingRect.Height == 0 || boundingRect.Width == 0); } /// 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; if (peer.ChildrenValid && peer.Children == null && this.AncestorsInvalid) { peer.AncestorsInvalid = true; wrapperPeer.AncestorsInvalid = true; } } } //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; } /// override protected bool IsOffscreenCore() { if (!Owner.IsVisible) return true; Rect boundingRect = CalculateVisibleBoundingRect(); return (boundingRect == Rect.Empty || boundingRect.Height == 0 || boundingRect.Width == 0); } /// 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; if (peer.ChildrenValid && peer.Children == null && this.AncestorsInvalid) { peer.AncestorsInvalid = true; wrapperPeer.AncestorsInvalid = true; } } } //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
- SerialReceived.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- ClickablePoint.cs
- CodeCommentStatementCollection.cs
- RuntimeResourceSet.cs
- ResourceWriter.cs
- HtmlElementErrorEventArgs.cs
- SpnegoTokenProvider.cs
- ParagraphResult.cs
- AppDomainEvidenceFactory.cs
- LinkLabelLinkClickedEvent.cs
- SRGSCompiler.cs
- CharEntityEncoderFallback.cs
- DataObjectFieldAttribute.cs
- ToolboxItemFilterAttribute.cs
- RoutedUICommand.cs
- XsltException.cs
- MaterializeFromAtom.cs
- StateDesigner.LayoutSelectionGlyph.cs
- GiveFeedbackEventArgs.cs
- ProgressBarRenderer.cs
- DecoderFallbackWithFailureFlag.cs
- URL.cs
- MonthChangedEventArgs.cs
- GridViewUpdateEventArgs.cs
- streamingZipPartStream.cs
- ErrorFormatterPage.cs
- StylusPlugInCollection.cs
- MarginCollapsingState.cs
- SocketException.cs
- WeakReadOnlyCollection.cs
- TemplatedAdorner.cs
- IntSecurity.cs
- Comparer.cs
- SmiContextFactory.cs
- QilNode.cs
- Stream.cs
- SelectionService.cs
- WorkflowViewManager.cs
- IntPtr.cs
- HostingEnvironmentException.cs
- ObjectStateManager.cs
- BindableTemplateBuilder.cs
- UnmanagedMemoryStream.cs
- httpapplicationstate.cs
- MiniConstructorInfo.cs
- ValueSerializerAttribute.cs
- NumericUpDownAcceleration.cs
- ModelTreeManager.cs
- WorkflowRuntimeServiceElement.cs
- Int32Converter.cs
- ProviderUtil.cs
- CommandID.cs
- ListViewSortEventArgs.cs
- DataGridViewRowHeaderCell.cs
- StatusBarDrawItemEvent.cs
- SqlCacheDependency.cs
- XPathChildIterator.cs
- XmlILOptimizerVisitor.cs
- XmlSerializableReader.cs
- SortedSet.cs
- PrintingPermissionAttribute.cs
- ListParaClient.cs
- AstNode.cs
- InputBindingCollection.cs
- DeploymentSectionCache.cs
- IsolatedStoragePermission.cs
- XhtmlBasicLinkAdapter.cs
- Expr.cs
- PrimaryKeyTypeConverter.cs
- ResourceExpressionEditorSheet.cs
- GridItemCollection.cs
- TreeNodeCollection.cs
- UIPropertyMetadata.cs
- XmlDataSourceView.cs
- ConfigXmlReader.cs
- StorageMappingItemCollection.cs
- TypeToken.cs
- FixUpCollection.cs
- SqlDataAdapter.cs
- PinnedBufferMemoryStream.cs
- FormClosingEvent.cs
- HtmlTableRowCollection.cs
- UserPreferenceChangingEventArgs.cs
- QuaternionValueSerializer.cs
- DrawingAttributesDefaultValueFactory.cs
- BevelBitmapEffect.cs
- InputLanguageCollection.cs
- ProxyWebPartConnectionCollection.cs
- DataGridViewRowCollection.cs
- SerializerDescriptor.cs
- HtmlToClrEventProxy.cs
- BamlRecordReader.cs
- Button.cs
- FixedSOMFixedBlock.cs
- StringPropertyBuilder.cs
- XmlAttributeProperties.cs
- PassportAuthenticationModule.cs
- DefaultCommandExtensionCallback.cs
- XamlValidatingReader.cs