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
- GenericRootAutomationPeer.cs
- AssemblyBuilderData.cs
- BlurBitmapEffect.cs
- _CacheStreams.cs
- SynchronizationHandlesCodeDomSerializer.cs
- SqlDataSourceSummaryPanel.cs
- DBConnection.cs
- DictionaryItemsCollection.cs
- XmlCustomFormatter.cs
- ObjectSecurity.cs
- WebHostUnsafeNativeMethods.cs
- CodeTypeMember.cs
- PasswordTextNavigator.cs
- ExpressionVisitor.cs
- SdlChannelSink.cs
- LayoutDump.cs
- TransformerInfo.cs
- HyperLinkStyle.cs
- SoapSchemaExporter.cs
- XPathExpr.cs
- MulticastDelegate.cs
- Operator.cs
- SingleObjectCollection.cs
- ConfigViewGenerator.cs
- ButtonPopupAdapter.cs
- HwndSource.cs
- RotateTransform3D.cs
- AsmxEndpointPickerExtension.cs
- sqlnorm.cs
- SystemWebCachingSectionGroup.cs
- querybuilder.cs
- BindToObject.cs
- SecureStringHasher.cs
- RightsManagementPermission.cs
- BStrWrapper.cs
- UIElement3D.cs
- CorePropertiesFilter.cs
- PointF.cs
- PlaceHolder.cs
- SqlDataSourceView.cs
- PrtTicket_Public_Simple.cs
- CalendarDay.cs
- CookieParameter.cs
- X509Certificate.cs
- ManagedFilter.cs
- NativeMethods.cs
- XmlAttributes.cs
- ReflectionServiceProvider.cs
- Processor.cs
- _TLSstream.cs
- _HelperAsyncResults.cs
- CompositionAdorner.cs
- AsyncStreamReader.cs
- ListControl.cs
- SqlProviderUtilities.cs
- _SSPISessionCache.cs
- ProfileBuildProvider.cs
- BoolLiteral.cs
- Matrix3DStack.cs
- HttpRawResponse.cs
- FlagsAttribute.cs
- RSAOAEPKeyExchangeFormatter.cs
- TableChangeProcessor.cs
- SoapElementAttribute.cs
- StateChangeEvent.cs
- FusionWrap.cs
- DataGridViewAccessibleObject.cs
- UnmanagedBitmapWrapper.cs
- UTF7Encoding.cs
- SqlStatistics.cs
- SoapReflector.cs
- ConfigurationManagerInternal.cs
- QilReference.cs
- StaticSiteMapProvider.cs
- CreateUserWizard.cs
- AlternateViewCollection.cs
- ConnectionStringSettingsCollection.cs
- UserControl.cs
- SoapSchemaMember.cs
- SessionStateSection.cs
- MessageQueuePermissionEntryCollection.cs
- ImageSource.cs
- BitmapEffectState.cs
- LocalFileSettingsProvider.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- Camera.cs
- UnaryExpression.cs
- CompositeCollection.cs
- InkCanvasInnerCanvas.cs
- ItemCheckedEvent.cs
- DataBoundLiteralControl.cs
- ReversePositionQuery.cs
- CollaborationHelperFunctions.cs
- StorageSetMapping.cs
- EpmContentDeSerializerBase.cs
- QilReplaceVisitor.cs
- RoleManagerSection.cs
- BezierSegment.cs
- ResourceDescriptionAttribute.cs
- RelatedPropertyManager.cs