Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Automation / Peers / TreeViewAutomationPeer.cs / 1305600 / TreeViewAutomationPeer.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.Interop; using System.Windows.Media; using MS.Internal; using MS.Win32; namespace System.Windows.Automation.Peers { /// public class TreeViewAutomationPeer : ItemsControlAutomationPeer, ISelectionProvider { /// public TreeViewAutomationPeer(TreeView owner): base(owner) {} /// override protected AutomationControlType GetAutomationControlTypeCore() { return AutomationControlType.Tree; } /// override protected string GetClassNameCore() { return "TreeView"; } /// override public object GetPattern(PatternInterface patternInterface) { if (patternInterface == PatternInterface.Selection) { return this; } else if(patternInterface == PatternInterface.Scroll) { ItemsControl owner = (ItemsControl)Owner; if(owner.ScrollHost != null) { AutomationPeer scrollPeer = UIElementAutomationPeer.CreatePeerForElement(owner.ScrollHost); if(scrollPeer != null && scrollPeer is IScrollProvider) { scrollPeer.EventsSource = this; return (IScrollProvider)scrollPeer; } } } return base.GetPattern(patternInterface); } /// protected override ListGetChildrenCore() { // To avoid the situation on legacy systems which may not have new unmanaged core. with this change with old unmanaged core // the behavior would be same as earlier. if (ItemContainerPatternIdentifiers.Pattern != null) return base.GetChildrenCore(); else { ItemsControl owner = (ItemsControl)Owner; ItemCollection items = owner.Items; List children = null; ItemPeersStorage oldChildren = ItemPeers; //cache the old ones for possible reuse ItemPeers = new ItemPeersStorage (); if (items.Count > 0) { children = new List (items.Count); for (int i = 0; i < items.Count; i++) { TreeViewItem treeViewItem = owner.ItemContainerGenerator.ContainerFromIndex(i) as TreeViewItem; if (treeViewItem != null) { ItemAutomationPeer peer = oldChildren[items[i]]; if (peer == null) peer = CreateItemAutomationPeer(items[i]); // 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; } } // Not to add same Item again if (ItemPeers[items[i]] == null) { children.Add(peer); ItemPeers[items[i]] = peer; } } } return children; } } return null; } /// override protected ItemAutomationPeer CreateItemAutomationPeer(object item) { return new TreeViewDataItemAutomationPeer(item, this, null); } /// internal override bool IsPropertySupportedByControlForFindItem(int id) { if (base.IsPropertySupportedByControlForFindItem(id)) return true; else { if (SelectionItemPatternIdentifiers.IsSelectedProperty.Id == id) return true; else return false; } } /// /// Support for IsSelectedProperty should come from SelectorAutomationPeer only, /// internal override object GetSupportedPropertyValue(ItemAutomationPeer itemPeer, int propertyId) { if (SelectionItemPatternIdentifiers.IsSelectedProperty.Id == propertyId) { ISelectionItemProvider selectionItem = itemPeer.GetPattern(PatternInterface.SelectionItem) as ISelectionItemProvider; if (selectionItem != null) return selectionItem.IsSelected; else return null; } return base.GetSupportedPropertyValue(itemPeer, propertyId); } //-------------------------------------------------------------------- // // ISelectionProvider // //------------------------------------------------------------------- #region ISelectionProvider ////// Returns the current selection. /// ///The current selection. IRawElementProviderSimple[] ISelectionProvider.GetSelection() { IRawElementProviderSimple[] selection = null; TreeViewItem selectedContainer = ((TreeView)Owner).SelectedContainer; if (selectedContainer != null) { AutomationPeer peer = UIElementAutomationPeer.FromElement(selectedContainer); // With virtualization in effect TreeViewDataItemAP would be exposed to client not the Peer directly associated with UI // and Selection must return the relevant peer(TreeViewDataItemAP) stored in EventSource. if(peer.EventsSource != null) peer = peer.EventsSource; if (peer != null) { selection = new IRawElementProviderSimple[] { ProviderFromPeer(peer) }; } } if (selection == null) { selection = new IRawElementProviderSimple[0]; } return selection; } bool ISelectionProvider.CanSelectMultiple { get { return false; } } bool ISelectionProvider.IsSelectionRequired { get { return false; } } #endregion } } // 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.Interop; using System.Windows.Media; using MS.Internal; using MS.Win32; namespace System.Windows.Automation.Peers { /// public class TreeViewAutomationPeer : ItemsControlAutomationPeer, ISelectionProvider { /// public TreeViewAutomationPeer(TreeView owner): base(owner) {} /// override protected AutomationControlType GetAutomationControlTypeCore() { return AutomationControlType.Tree; } /// override protected string GetClassNameCore() { return "TreeView"; } /// override public object GetPattern(PatternInterface patternInterface) { if (patternInterface == PatternInterface.Selection) { return this; } else if(patternInterface == PatternInterface.Scroll) { ItemsControl owner = (ItemsControl)Owner; if(owner.ScrollHost != null) { AutomationPeer scrollPeer = UIElementAutomationPeer.CreatePeerForElement(owner.ScrollHost); if(scrollPeer != null && scrollPeer is IScrollProvider) { scrollPeer.EventsSource = this; return (IScrollProvider)scrollPeer; } } } return base.GetPattern(patternInterface); } /// protected override ListGetChildrenCore() { // To avoid the situation on legacy systems which may not have new unmanaged core. with this change with old unmanaged core // the behavior would be same as earlier. if (ItemContainerPatternIdentifiers.Pattern != null) return base.GetChildrenCore(); else { ItemsControl owner = (ItemsControl)Owner; ItemCollection items = owner.Items; List children = null; ItemPeersStorage oldChildren = ItemPeers; //cache the old ones for possible reuse ItemPeers = new ItemPeersStorage (); if (items.Count > 0) { children = new List (items.Count); for (int i = 0; i < items.Count; i++) { TreeViewItem treeViewItem = owner.ItemContainerGenerator.ContainerFromIndex(i) as TreeViewItem; if (treeViewItem != null) { ItemAutomationPeer peer = oldChildren[items[i]]; if (peer == null) peer = CreateItemAutomationPeer(items[i]); // 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; } } // Not to add same Item again if (ItemPeers[items[i]] == null) { children.Add(peer); ItemPeers[items[i]] = peer; } } } return children; } } return null; } /// override protected ItemAutomationPeer CreateItemAutomationPeer(object item) { return new TreeViewDataItemAutomationPeer(item, this, null); } /// internal override bool IsPropertySupportedByControlForFindItem(int id) { if (base.IsPropertySupportedByControlForFindItem(id)) return true; else { if (SelectionItemPatternIdentifiers.IsSelectedProperty.Id == id) return true; else return false; } } /// /// Support for IsSelectedProperty should come from SelectorAutomationPeer only, /// internal override object GetSupportedPropertyValue(ItemAutomationPeer itemPeer, int propertyId) { if (SelectionItemPatternIdentifiers.IsSelectedProperty.Id == propertyId) { ISelectionItemProvider selectionItem = itemPeer.GetPattern(PatternInterface.SelectionItem) as ISelectionItemProvider; if (selectionItem != null) return selectionItem.IsSelected; else return null; } return base.GetSupportedPropertyValue(itemPeer, propertyId); } //-------------------------------------------------------------------- // // ISelectionProvider // //------------------------------------------------------------------- #region ISelectionProvider ////// Returns the current selection. /// ///The current selection. IRawElementProviderSimple[] ISelectionProvider.GetSelection() { IRawElementProviderSimple[] selection = null; TreeViewItem selectedContainer = ((TreeView)Owner).SelectedContainer; if (selectedContainer != null) { AutomationPeer peer = UIElementAutomationPeer.FromElement(selectedContainer); // With virtualization in effect TreeViewDataItemAP would be exposed to client not the Peer directly associated with UI // and Selection must return the relevant peer(TreeViewDataItemAP) stored in EventSource. if(peer.EventsSource != null) peer = peer.EventsSource; if (peer != null) { selection = new IRawElementProviderSimple[] { ProviderFromPeer(peer) }; } } if (selection == null) { selection = new IRawElementProviderSimple[0]; } return selection; } bool ISelectionProvider.CanSelectMultiple { get { return false; } } bool ISelectionProvider.IsSelectionRequired { get { return false; } } #endregion } } // 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
- MarkupExtensionParser.cs
- DesignerListAdapter.cs
- TextTreeInsertUndoUnit.cs
- SystemIPAddressInformation.cs
- HighContrastHelper.cs
- DockAndAnchorLayout.cs
- CommonGetThemePartSize.cs
- NativeMethods.cs
- SoapAttributeAttribute.cs
- QilPatternVisitor.cs
- SmtpTransport.cs
- CollectionViewSource.cs
- ADMembershipProvider.cs
- DesignerCategoryAttribute.cs
- WebPartCatalogAddVerb.cs
- ValueQuery.cs
- bidPrivateBase.cs
- COM2IPerPropertyBrowsingHandler.cs
- TeredoHelper.cs
- MessageQueueEnumerator.cs
- InvalidCommandTreeException.cs
- DataServicePagingProviderWrapper.cs
- DeclaredTypeElement.cs
- OutputCacheProfile.cs
- RandomDelayQueuedSendsAsyncResult.cs
- FormViewPagerRow.cs
- VisualBasicHelper.cs
- WebPartVerbCollection.cs
- ASCIIEncoding.cs
- ObjectStateFormatter.cs
- EnvironmentPermission.cs
- BitmapFrameEncode.cs
- MainMenu.cs
- CompModSwitches.cs
- OperatingSystem.cs
- ApplicationDirectoryMembershipCondition.cs
- ImageField.cs
- activationcontext.cs
- LongPath.cs
- ObjectStateFormatter.cs
- PropertyRef.cs
- DesignerCategoryAttribute.cs
- ProgressBarRenderer.cs
- WebPartHeaderCloseVerb.cs
- TextChangedEventArgs.cs
- DrawingImage.cs
- CreatingCookieEventArgs.cs
- Invariant.cs
- MetricEntry.cs
- ImageIndexConverter.cs
- NotifyParentPropertyAttribute.cs
- HtmlEncodedRawTextWriter.cs
- SafeNativeMethods.cs
- DataPagerFieldCommandEventArgs.cs
- sortedlist.cs
- StateManagedCollection.cs
- LockCookie.cs
- FileAuthorizationModule.cs
- UnlockInstanceAsyncResult.cs
- DataGridViewHitTestInfo.cs
- DataPagerFieldItem.cs
- CmsInterop.cs
- InputLanguageManager.cs
- InstanceKeyView.cs
- AdornedElementPlaceholder.cs
- PeerNameRegistration.cs
- DecimalConverter.cs
- GridViewRowPresenterBase.cs
- EventLogInformation.cs
- XmlUrlResolver.cs
- NamedPermissionSet.cs
- WindowsHyperlink.cs
- Version.cs
- ProcessThread.cs
- WorkflowRuntimeServiceElementCollection.cs
- MenuItemBindingCollection.cs
- _TimerThread.cs
- XmlDataFileEditor.cs
- MultiBinding.cs
- SecurityPolicySection.cs
- XmlChildEnumerator.cs
- CompilerState.cs
- ColumnResizeUndoUnit.cs
- SystemInformation.cs
- DirectoryGroupQuery.cs
- RootBuilder.cs
- TextBlockAutomationPeer.cs
- IgnoreDeviceFilterElement.cs
- ElementInit.cs
- OverflowException.cs
- EntityContainerAssociationSet.cs
- WindowsListViewGroup.cs
- UndirectedGraph.cs
- EmptyImpersonationContext.cs
- StrokeNodeData.cs
- DefaultEvaluationContext.cs
- VectorKeyFrameCollection.cs
- DataSetMappper.cs
- WriteFileContext.cs
- TabItemAutomationPeer.cs