Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / 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); ItemsControlAutomationPeer itemsControlAP = itemsControl.CreateAutomationPeer() as ItemsControlAutomationPeer; 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
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- TypeReference.cs
- DetailsViewDeleteEventArgs.cs
- WindowsEditBoxRange.cs
- CorrelationManager.cs
- ACE.cs
- NumericUpDown.cs
- RubberbandSelector.cs
- Assert.cs
- ResourceContainer.cs
- CopyEncoder.cs
- SerializationFieldInfo.cs
- SystemSounds.cs
- ReferencedAssemblyResolver.cs
- TableCell.cs
- PageHandlerFactory.cs
- SolidColorBrush.cs
- ECDsa.cs
- BindingContext.cs
- TerminateSequence.cs
- FixedSOMSemanticBox.cs
- bindurihelper.cs
- HijriCalendar.cs
- EtwTrackingBehaviorElement.cs
- VirtualPathUtility.cs
- DynamicILGenerator.cs
- WebPartEditorOkVerb.cs
- BackgroundWorker.cs
- LineServicesRun.cs
- Helpers.cs
- SHA1CryptoServiceProvider.cs
- ApplicationContext.cs
- ObjectDisposedException.cs
- ContentDesigner.cs
- WindowsListViewItemCheckBox.cs
- LostFocusEventManager.cs
- RestrictedTransactionalPackage.cs
- RangeValueProviderWrapper.cs
- PersonalizableAttribute.cs
- GeneratedView.cs
- DataGridViewCellCancelEventArgs.cs
- OutputScope.cs
- DataGridViewLinkCell.cs
- ApplicationId.cs
- StreamWithDictionary.cs
- CallbackWrapper.cs
- StylusShape.cs
- ManipulationCompletedEventArgs.cs
- OutputCacheModule.cs
- HitTestDrawingContextWalker.cs
- FrameworkElement.cs
- Vars.cs
- OptionalColumn.cs
- ConnectionManagementElement.cs
- HtmlButton.cs
- Atom10FormatterFactory.cs
- CompressionTransform.cs
- IdentityHolder.cs
- ClientSideQueueItem.cs
- NavigationWindow.cs
- DataGridBeginningEditEventArgs.cs
- MessageRpc.cs
- QueryStack.cs
- CodeCatchClause.cs
- ConnectionsZone.cs
- ControlCachePolicy.cs
- Msec.cs
- FieldToken.cs
- SchemaCompiler.cs
- SoapObjectInfo.cs
- EventWaitHandleSecurity.cs
- ClientRuntimeConfig.cs
- SoapIgnoreAttribute.cs
- SystemIPv4InterfaceProperties.cs
- FakeModelPropertyImpl.cs
- DefaultCompensation.cs
- brushes.cs
- SyntaxCheck.cs
- BStrWrapper.cs
- PageParserFilter.cs
- CodeTypeMember.cs
- DependencyPropertyChangedEventArgs.cs
- ToolStripArrowRenderEventArgs.cs
- HtmlInputImage.cs
- ExeConfigurationFileMap.cs
- RegexCompilationInfo.cs
- InvokerUtil.cs
- ToolStripSystemRenderer.cs
- SystemIPInterfaceProperties.cs
- EditorZoneDesigner.cs
- DetailsViewModeEventArgs.cs
- EventLogHandle.cs
- MemberRestriction.cs
- DeferredElementTreeState.cs
- XmlNavigatorFilter.cs
- DataTableTypeConverter.cs
- OracleCommandSet.cs
- Animatable.cs
- CancellationHandler.cs
- ProtocolsConfigurationEntry.cs