Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- SpeechSeg.cs
- GPStream.cs
- ObjectTag.cs
- ParserHooks.cs
- WindowsEditBox.cs
- ControlTemplate.cs
- Mutex.cs
- IconHelper.cs
- SoapAttributeOverrides.cs
- XmlTextEncoder.cs
- SkewTransform.cs
- OraclePermission.cs
- NullRuntimeConfig.cs
- IntegrationExceptionEventArgs.cs
- ColumnWidthChangingEvent.cs
- SymbolType.cs
- InvokePattern.cs
- Decimal.cs
- MimeTypePropertyAttribute.cs
- ProcessActivityTreeOptions.cs
- CommentEmitter.cs
- ColorPalette.cs
- TextBlockAutomationPeer.cs
- BitmapEffectDrawing.cs
- XamlBuildTaskServices.cs
- GridItemCollection.cs
- FamilyTypeface.cs
- ServiceNameCollection.cs
- ItemContainerProviderWrapper.cs
- DataGridViewDataErrorEventArgs.cs
- _TimerThread.cs
- ClientApiGenerator.cs
- ColorAnimationUsingKeyFrames.cs
- XmlSchemaSubstitutionGroup.cs
- MultiTrigger.cs
- ContractReference.cs
- Italic.cs
- RequestCachePolicyConverter.cs
- GenerateTemporaryAssemblyTask.cs
- PropertyRecord.cs
- ThicknessAnimationBase.cs
- SqlRetyper.cs
- MultipleCopiesCollection.cs
- PropertyRecord.cs
- ReadOnlyDataSourceView.cs
- BufferedOutputAsyncStream.cs
- SelectionPatternIdentifiers.cs
- StandardToolWindows.cs
- DbConnectionFactory.cs
- SchemaManager.cs
- Constants.cs
- XmlILModule.cs
- sortedlist.cs
- WebBrowser.cs
- SystemDropShadowChrome.cs
- JsonSerializer.cs
- UrlRoutingHandler.cs
- IdentityHolder.cs
- SqlNode.cs
- OracleParameterCollection.cs
- XNodeNavigator.cs
- GestureRecognitionResult.cs
- RadioButton.cs
- WaitForChangedResult.cs
- SecurityCookieModeValidator.cs
- FontFamily.cs
- CustomAttribute.cs
- MsmqInputChannelListenerBase.cs
- ExtentKey.cs
- OptimalTextSource.cs
- ControlPropertyNameConverter.cs
- DeadLetterQueue.cs
- MarkupCompilePass2.cs
- TimeoutValidationAttribute.cs
- WebBaseEventKeyComparer.cs
- Operators.cs
- SecureConversationVersion.cs
- Literal.cs
- Metadata.cs
- ResolveResponseInfo.cs
- HtmlObjectListAdapter.cs
- OdbcRowUpdatingEvent.cs
- ContextProperty.cs
- ListViewSelectEventArgs.cs
- XmlNamespaceMappingCollection.cs
- XmlSchemaChoice.cs
- PrimitiveXmlSerializers.cs
- OptionalColumn.cs
- Char.cs
- PersonalizationEntry.cs
- httpserverutility.cs
- ErrorProvider.cs
- SqlCachedBuffer.cs
- PageEventArgs.cs
- State.cs
- SafeCryptoHandles.cs
- PrinterUnitConvert.cs
- Itemizer.cs
- FamilyMap.cs
- SoapAttributeAttribute.cs