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
- TransformCollection.cs
- ClrProviderManifest.cs
- CodeDOMUtility.cs
- IDQuery.cs
- ListControl.cs
- XamlGridLengthSerializer.cs
- XmlWriter.cs
- FixedSOMTableRow.cs
- SubpageParaClient.cs
- SchemaConstraints.cs
- OleDbError.cs
- SecurityResources.cs
- MailAddressCollection.cs
- Int16Storage.cs
- IntranetCredentialPolicy.cs
- TextShapeableCharacters.cs
- BaseValidatorDesigner.cs
- CorrelationQuery.cs
- RotateTransform3D.cs
- UnmanagedMemoryStream.cs
- ConfigurationProperty.cs
- NameScopePropertyAttribute.cs
- RawAppCommandInputReport.cs
- LineBreakRecord.cs
- InvokeMethod.cs
- SqlNodeAnnotations.cs
- DocumentCollection.cs
- SqlProviderManifest.cs
- DataTableCollection.cs
- HtmlForm.cs
- StructuredTypeEmitter.cs
- AdapterUtil.cs
- GridSplitterAutomationPeer.cs
- SetterTriggerConditionValueConverter.cs
- BoolExpressionVisitors.cs
- TypeDescriptionProviderAttribute.cs
- Transform3DGroup.cs
- EdmProperty.cs
- Trace.cs
- PropertyValueChangedEvent.cs
- ObjectPropertyMapping.cs
- PersistChildrenAttribute.cs
- XmlAnyElementAttributes.cs
- ProfileManager.cs
- CommonObjectSecurity.cs
- LostFocusEventManager.cs
- ProbeMatchesCD1.cs
- nulltextcontainer.cs
- GroupBoxDesigner.cs
- ModuleElement.cs
- ProjectionPlanCompiler.cs
- NamespaceQuery.cs
- MemoryFailPoint.cs
- BoundPropertyEntry.cs
- WindowsEditBoxRange.cs
- ZipIOExtraFieldZip64Element.cs
- DispatcherObject.cs
- ContainerUtilities.cs
- ToolStripMenuItem.cs
- TextDpi.cs
- XmlWrappingWriter.cs
- ArraySortHelper.cs
- SettingsPropertyWrongTypeException.cs
- Item.cs
- Vars.cs
- WpfKnownMemberInvoker.cs
- DbConnectionOptions.cs
- DataGridTextBox.cs
- IDQuery.cs
- CachedRequestParams.cs
- RegexWorker.cs
- QuaternionAnimationBase.cs
- EpmSyndicationContentSerializer.cs
- Soap.cs
- TextRange.cs
- BigIntegerStorage.cs
- ConnectionsZone.cs
- Unit.cs
- DataGridViewControlCollection.cs
- BoundPropertyEntry.cs
- FileSystemWatcher.cs
- InvalidCommandTreeException.cs
- ReaderContextStackData.cs
- DataGridLinkButton.cs
- OleDbWrapper.cs
- CombinedGeometry.cs
- TracingConnectionInitiator.cs
- BoundPropertyEntry.cs
- OutputScopeManager.cs
- HandlerFactoryCache.cs
- LoaderAllocator.cs
- CopyOfAction.cs
- RulePatternOps.cs
- CompilerCollection.cs
- TemplateColumn.cs
- DataGridViewComboBoxCell.cs
- MsmqIntegrationValidationBehavior.cs
- AsymmetricSignatureFormatter.cs
- ZoneMembershipCondition.cs
- ResourceAttributes.cs