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 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.
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
- TimeSpanConverter.cs
- CompressEmulationStream.cs
- GeometryCombineModeValidation.cs
- ImageButton.cs
- EventDescriptor.cs
- Decorator.cs
- SmtpAuthenticationManager.cs
- IdentityManager.cs
- XmlWellformedWriter.cs
- DataServiceQueryOfT.cs
- XsltLibrary.cs
- TableRow.cs
- ConditionChanges.cs
- ObservableDictionary.cs
- MembershipUser.cs
- AssemblyCacheEntry.cs
- SmiEventStream.cs
- CorrelationResolver.cs
- TraceUtility.cs
- PropertyChangedEventArgs.cs
- DecoderFallback.cs
- BindValidationContext.cs
- PluralizationServiceUtil.cs
- MarshalByRefObject.cs
- LayoutTableCell.cs
- TextFormatterHost.cs
- GeneralTransform3DTo2D.cs
- FloaterBaseParagraph.cs
- SoapObjectWriter.cs
- XmlEntity.cs
- ResourceContainerWrapper.cs
- WebEventCodes.cs
- WindowsPrincipal.cs
- CheckBoxBaseAdapter.cs
- WebPartHeaderCloseVerb.cs
- TabPage.cs
- WebPartCatalogCloseVerb.cs
- SourceFileInfo.cs
- Brush.cs
- WindowsScrollBarBits.cs
- NativeMethods.cs
- WMIGenerator.cs
- UDPClient.cs
- SQLResource.cs
- HtmlInputHidden.cs
- CompilationLock.cs
- CatchBlock.cs
- WebPartCatalogCloseVerb.cs
- TemplateComponentConnector.cs
- FixedSOMFixedBlock.cs
- StackSpiller.Temps.cs
- RectAnimation.cs
- ScriptReference.cs
- ColumnHeader.cs
- SmtpMail.cs
- FlowDocumentFormatter.cs
- HttpHandlersSection.cs
- SqlTriggerContext.cs
- FileDialog.cs
- NameValueCollection.cs
- BaseEntityWrapper.cs
- BuildProviderAppliesToAttribute.cs
- RequestCacheManager.cs
- ClickablePoint.cs
- SplineQuaternionKeyFrame.cs
- ExpressionDumper.cs
- GetPageNumberCompletedEventArgs.cs
- EventLevel.cs
- ToolStripDropDownItemDesigner.cs
- TcpConnectionPoolSettings.cs
- SqlFunctions.cs
- QueryReaderSettings.cs
- Point.cs
- TemplatedAdorner.cs
- ClientData.cs
- ReferencedAssembly.cs
- Operators.cs
- InstalledVoice.cs
- EventDrivenDesigner.cs
- OracleConnectionStringBuilder.cs
- DataViewListener.cs
- OleDbRowUpdatedEvent.cs
- DataSourceControl.cs
- DataRowChangeEvent.cs
- ResXResourceReader.cs
- AssemblyCollection.cs
- AnimationTimeline.cs
- GeneratedView.cs
- ScriptResourceMapping.cs
- SynchronizationContextHelper.cs
- UrlMappingCollection.cs
- DrawingAttributesDefaultValueFactory.cs
- AnimatedTypeHelpers.cs
- OperatorExpressions.cs
- DataTableCollection.cs
- RegexInterpreter.cs
- TextRenderer.cs
- TableChangeProcessor.cs
- SystemIPv6InterfaceProperties.cs
- Regex.cs