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
- XmlByteStreamWriter.cs
- WebServiceParameterData.cs
- QueryProcessor.cs
- CapiNative.cs
- Int16KeyFrameCollection.cs
- XmlSerializerFactory.cs
- QilExpression.cs
- OracleColumn.cs
- TempFiles.cs
- DataSourceGroupCollection.cs
- XmlBoundElement.cs
- PhonemeConverter.cs
- ProxyDataContractResolver.cs
- X509SecurityTokenProvider.cs
- WebDescriptionAttribute.cs
- Endpoint.cs
- LayoutDump.cs
- HijriCalendar.cs
- WebPartUserCapability.cs
- fixedPageContentExtractor.cs
- ExpressionPrefixAttribute.cs
- NameSpaceEvent.cs
- XPathDocumentBuilder.cs
- NumberSubstitution.cs
- AbandonedMutexException.cs
- PointConverter.cs
- ToolStripScrollButton.cs
- LambdaCompiler.Lambda.cs
- XPathArrayIterator.cs
- ServicePoint.cs
- TableRowCollection.cs
- ToolStripSeparatorRenderEventArgs.cs
- ImageCodecInfoPrivate.cs
- TimelineGroup.cs
- RtType.cs
- DataTableMappingCollection.cs
- ButtonBase.cs
- DocumentPageTextView.cs
- indexingfiltermarshaler.cs
- KeyedByTypeCollection.cs
- X509Certificate.cs
- XmlName.cs
- ColumnMapCopier.cs
- ListViewPagedDataSource.cs
- RelationshipType.cs
- DataGridViewRowsRemovedEventArgs.cs
- PerfCounters.cs
- ACL.cs
- PropertyNames.cs
- ContainerParagraph.cs
- XmlNavigatorStack.cs
- SqlSelectClauseBuilder.cs
- RegistrySecurity.cs
- _SslStream.cs
- ListBoxChrome.cs
- ADRoleFactoryConfiguration.cs
- Constants.cs
- NativeMethodsOther.cs
- PageParser.cs
- DoubleStorage.cs
- HWStack.cs
- Helpers.cs
- XmlSerializerNamespaces.cs
- Geometry3D.cs
- UnknownBitmapEncoder.cs
- followingsibling.cs
- XmlSchemaValidator.cs
- ZoomPercentageConverter.cs
- CheckPair.cs
- HostProtectionException.cs
- Speller.cs
- ListControlConvertEventArgs.cs
- ZoneIdentityPermission.cs
- BinaryFormatterWriter.cs
- MeasurementDCInfo.cs
- BigInt.cs
- EntityDataSourceMemberPath.cs
- DbConnectionInternal.cs
- SqlUtil.cs
- HScrollBar.cs
- FieldDescriptor.cs
- ContractListAdapter.cs
- AspNetRouteServiceHttpHandler.cs
- QueryOutputWriterV1.cs
- QilSortKey.cs
- InputMethodStateChangeEventArgs.cs
- MatrixStack.cs
- BitmapCacheBrush.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- RightsManagementInformation.cs
- FrameworkContentElementAutomationPeer.cs
- MarkupCompilePass2.cs
- SiteMapNodeCollection.cs
- DistinctQueryOperator.cs
- DebugHandleTracker.cs
- HtmlInputRadioButton.cs
- SiteMapProvider.cs
- MenuAutomationPeer.cs
- AnnotationComponentManager.cs
- PrintEvent.cs