Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TextServicesCompartment.cs
- RawUIStateInputReport.cs
- AnonymousIdentificationModule.cs
- XmlMembersMapping.cs
- SqlBulkCopyColumnMapping.cs
- Tile.cs
- BinaryCommonClasses.cs
- Keywords.cs
- Tablet.cs
- DateTimeValueSerializer.cs
- CredentialCache.cs
- WebScriptMetadataInstanceContextProvider.cs
- HttpErrorTraceRecord.cs
- HtmlCalendarAdapter.cs
- SqlParameterizer.cs
- DataGridViewCheckBoxCell.cs
- XmlSerializerNamespaces.cs
- TextSearch.cs
- LinqDataSourceStatusEventArgs.cs
- Visual3D.cs
- UnhandledExceptionEventArgs.cs
- Application.cs
- GlyphInfoList.cs
- IssuedSecurityTokenParameters.cs
- NameSpaceExtractor.cs
- TypefaceCollection.cs
- SpellerInterop.cs
- LocalTransaction.cs
- UIElement3D.cs
- RequestStatusBarUpdateEventArgs.cs
- IndexExpression.cs
- ExternalException.cs
- ClipboardProcessor.cs
- RemoteDebugger.cs
- WindowsGraphics.cs
- ExtensionWindowHeader.cs
- TimeSpanMinutesConverter.cs
- SpnEndpointIdentity.cs
- GraphicsPathIterator.cs
- SectionInput.cs
- BuildManager.cs
- DPTypeDescriptorContext.cs
- KeyProperty.cs
- EventHandlingScope.cs
- DataBinder.cs
- DataObjectPastingEventArgs.cs
- CounterNameConverter.cs
- SystemPens.cs
- NTAccount.cs
- GridView.cs
- ProofTokenCryptoHandle.cs
- WorkflowServiceAttributesTypeConverter.cs
- GridLength.cs
- DataTableMappingCollection.cs
- IsolatedStorageFile.cs
- BufferedStream.cs
- SignedXml.cs
- OracleSqlParser.cs
- RequestCachePolicy.cs
- MissingMemberException.cs
- DefaultHttpHandler.cs
- ReservationCollection.cs
- XslAst.cs
- HttpResponse.cs
- CngKey.cs
- XmlArrayItemAttribute.cs
- RestHandlerFactory.cs
- QuaternionIndependentAnimationStorage.cs
- AuthenticateEventArgs.cs
- Models.cs
- MarkupProperty.cs
- SqlComparer.cs
- COM2DataTypeToManagedDataTypeConverter.cs
- NullRuntimeConfig.cs
- SafeTimerHandle.cs
- DateTimeFormatInfo.cs
- ServicePointManager.cs
- InvalidDataException.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- ResourceKey.cs
- RangeBase.cs
- JpegBitmapDecoder.cs
- BasePattern.cs
- TripleDES.cs
- DynamicMetaObjectBinder.cs
- IList.cs
- FunctionImportMapping.cs
- ConditionalExpression.cs
- PasswordDeriveBytes.cs
- PenContexts.cs
- RegistrationProxy.cs
- ScrollBarAutomationPeer.cs
- PropertyItem.cs
- ContextBase.cs
- TrailingSpaceComparer.cs
- XPathException.cs
- DataGridColumnsPage.cs
- SqlConnectionManager.cs
- UserControlDesigner.cs
- SoapAttributeAttribute.cs