public virtual void TreeViewItemPeerScroll()
        {
            TreeView view = new TreeView {
                Height = 20, ItemsSource = new int[] { 1, 2, 3, 4, 5 }
            };
            TreeViewItem item = null;
            TreeViewItemAutomationPeer peer     = null;
            IScrollItemProvider        provider = null;

            TestAsync(
                5,
                view,
                () => item     = view.ItemContainerGenerator.ContainerFromIndex(4) as TreeViewItem,
                () => peer     = FrameworkElementAutomationPeer.CreatePeerForElement(item) as TreeViewItemAutomationPeer,
                () => provider = peer.GetPattern(PatternInterface.ScrollItem) as IScrollItemProvider,
                () => provider.ScrollIntoView(),
                () =>
            {
                foreach (DependencyObject obj in view.GetVisualDescendents())
                {
                    ScrollViewer viewer = obj as ScrollViewer;
                    if (viewer != null)
                    {
                        Assert.AreNotEqual(0, viewer.VerticalOffset, "ScrollHost was not scrolled!");
                        return;
                    }
                }
                Assert.Fail("Did not find the ScrollHost!");
            });
        }
예제 #2
0
        public DirectoryTree2()
        {
            #region ContextMenu
            this.AddHandler(TreeViewItem.MouseRightButtonUpEvent, new MouseButtonEventHandler(
                                (MouseButtonEventHandler) delegate(object sender, MouseButtonEventArgs args)
            {
                TreeViewItem sourceItem = UITools.GetParentTreeViewItem(args.OriginalSource as FrameworkElement);
                if (sourceItem != null)
                {
                    if (!sourceItem.IsSelected)
                    {
                        TreeViewItemAutomationPeer peer   = new TreeViewItemAutomationPeer(sourceItem);
                        ISelectionItemProvider invokeProv = peer.GetPattern(PatternInterface.SelectionItem) as ISelectionItemProvider;
                        invokeProv.Select();
                    }

                    if (sourceItem.IsSelected)
                    {
                        if (ContextMenuCommand != null && ContextMenuCommand.CanExecute(this.SelectedItem))
                        {
                            ContextMenuCommand.Execute(this.SelectedItem);
                        }
                    }
                }
            }));

            #endregion

            W7TreeViewItemUtils.SetIsEnabled(this, true);
        }
예제 #3
0
        private static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            TreeViewItem item       = (TreeViewItem)d;
            bool         isSelected = (bool)e.NewValue;

            item.Select(isSelected);

            TreeViewItemAutomationPeer peer = UIElementAutomationPeer.FromElement(item) as TreeViewItemAutomationPeer;

            if (peer != null)
            {
                peer.RaiseAutomationIsSelectedChanged(isSelected);
            }

            if (isSelected)
            {
                item.OnSelected(new RoutedEventArgs(SelectedEvent, item));
            }
            else
            {
                item.OnUnselected(new RoutedEventArgs(UnselectedEvent, item));
            }

            item.UpdateVisualState();
        }
        // Token: 0x060058F7 RID: 22775 RVA: 0x00189CAC File Offset: 0x00187EAC
        private static void OnIsExpandedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            TreeViewItem treeViewItem   = (TreeViewItem)d;
            bool         flag           = (bool)e.NewValue;
            TreeView     parentTreeView = treeViewItem.ParentTreeView;

            if (parentTreeView != null && !flag)
            {
                parentTreeView.HandleSelectionAndCollapsed(treeViewItem);
            }
            ItemsPresenter itemsHostPresenter = treeViewItem.ItemsHostPresenter;

            if (itemsHostPresenter != null)
            {
                treeViewItem.InvalidateMeasure();
                Helper.InvalidateMeasureOnPath(itemsHostPresenter, treeViewItem, false);
            }
            TreeViewItemAutomationPeer treeViewItemAutomationPeer = UIElementAutomationPeer.FromElement(treeViewItem) as TreeViewItemAutomationPeer;

            if (treeViewItemAutomationPeer != null)
            {
                treeViewItemAutomationPeer.RaiseExpandCollapseAutomationEvent((bool)e.OldValue, flag);
            }
            if (flag)
            {
                treeViewItem.OnExpanded(new RoutedEventArgs(TreeViewItem.ExpandedEvent, treeViewItem));
            }
            else
            {
                treeViewItem.OnCollapsed(new RoutedEventArgs(TreeViewItem.CollapsedEvent, treeViewItem));
            }
            treeViewItem.UpdateVisualState();
        }
예제 #5
0
        static void ShowNextItem(TreeViewItem item)
        {
            var peer = new TreeViewItemAutomationPeer(item);
            IExpandCollapseProvider expander = peer;

            expander.Expand();
            InvokeUtility.DoEvents();
        }
        public virtual void TreeViewItemPeerGetNoItems()
        {
            TreeViewItem item = new TreeViewItem();
            TreeViewItemAutomationPeer peer = null;

            TestAsync(
                item,
                () => peer = FrameworkElementAutomationPeer.CreatePeerForElement(item) as TreeViewItemAutomationPeer,
                () => Assert.IsNull(peer.GetChildren(), "There should be no children when the TreeViewItem does not have items!"));
        }
        public virtual void TreeViewItemAutomationPeerTypeAndClass()
        {
            TreeViewItem item = new TreeViewItem();
            TreeViewItemAutomationPeer peer = null;

            TestAsync(
                item,
                () => peer = FrameworkElementAutomationPeer.CreatePeerForElement(item) as TreeViewItemAutomationPeer,
                () => Assert.AreEqual(AutomationControlType.TreeItem, peer.GetAutomationControlType(), "Unexpected AutomationControlType!"),
                () => Assert.AreEqual("TreeViewItem", peer.GetClassName(), "Unexpected ClassType!"));
        }
        public virtual void TreeViewItemCreatesAutomationPeer()
        {
            TreeViewItem item = new TreeViewItem();
            TreeViewItemAutomationPeer peer = null;

            TestAsync(
                item,
                () => peer = FrameworkElementAutomationPeer.CreatePeerForElement(item) as TreeViewItemAutomationPeer,
                () => Assert.IsNotNull(peer, "TreeViewItem peer should not be null!"),
                () => Assert.AreEqual(item, peer.Owner, "TreeViewItem should be owner of the peer!"));
        }
        public virtual void TreeViewItemPeerCollapsingNoItems()
        {
            TreeViewItem item = new TreeViewItem();
            TreeViewItemAutomationPeer peer     = null;
            IExpandCollapseProvider    provider = null;

            TestAsync(
                item,
                () => peer     = FrameworkElementAutomationPeer.CreatePeerForElement(item) as TreeViewItemAutomationPeer,
                () => provider = peer.GetPattern(PatternInterface.ExpandCollapse) as IExpandCollapseProvider,
                () => provider.Collapse());
        }
        public virtual void TreeViewItemPeerScrollNoParent()
        {
            TreeViewItem item = new TreeViewItem();
            TreeViewItemAutomationPeer peer     = null;
            IScrollItemProvider        provider = null;

            TestAsync(
                item,
                () => peer     = FrameworkElementAutomationPeer.CreatePeerForElement(item) as TreeViewItemAutomationPeer,
                () => provider = peer.GetPattern(PatternInterface.ScrollItem) as IScrollItemProvider,
                () => provider.ScrollIntoView());
        }
        public virtual void TreeViewItemPeerSupportsExpandCollapse()
        {
            TreeViewItem item = new TreeViewItem();
            TreeViewItemAutomationPeer peer     = null;
            IExpandCollapseProvider    provider = null;

            TestAsync(
                item,
                () => peer     = FrameworkElementAutomationPeer.CreatePeerForElement(item) as TreeViewItemAutomationPeer,
                () => provider = peer.GetPattern(PatternInterface.ExpandCollapse) as IExpandCollapseProvider,
                () => Assert.IsNotNull(provider, "IExpandCollapseProvider peer should not be null!"));
        }
        public virtual void TreeViewItemPeerExpandStateNoItems()
        {
            TreeViewItem item = new TreeViewItem();
            TreeViewItemAutomationPeer peer     = null;
            IExpandCollapseProvider    provider = null;

            TestAsync(
                item,
                () => peer     = FrameworkElementAutomationPeer.CreatePeerForElement(item) as TreeViewItemAutomationPeer,
                () => provider = peer.GetPattern(PatternInterface.ExpandCollapse) as IExpandCollapseProvider,
                () => Assert.AreEqual(ExpandCollapseState.LeafNode, provider.ExpandCollapseState, "Unexpected ExpandCollapseState!"));
        }
        public virtual void TreeViewItemPeerExpandDisabled()
        {
            TreeViewItem item = new TreeViewItem {
                IsEnabled = false
            };
            TreeViewItemAutomationPeer peer     = null;
            IExpandCollapseProvider    provider = null;

            TestAsync(
                item,
                () => peer     = FrameworkElementAutomationPeer.CreatePeerForElement(item) as TreeViewItemAutomationPeer,
                () => provider = peer.GetPattern(PatternInterface.ExpandCollapse) as IExpandCollapseProvider,
                () => provider.Expand());
        }
        public virtual void TreeViewItemPeerExpandStateExpanded()
        {
            TreeViewItem item = new TreeViewItem {
                IsExpanded = true, ItemsSource = new int[] { 1, 2, 3 }
            };
            TreeViewItemAutomationPeer peer     = null;
            IExpandCollapseProvider    provider = null;

            TestAsync(
                item,
                () => peer     = FrameworkElementAutomationPeer.CreatePeerForElement(item) as TreeViewItemAutomationPeer,
                () => provider = peer.GetPattern(PatternInterface.ExpandCollapse) as IExpandCollapseProvider,
                () => Assert.AreEqual(ExpandCollapseState.Expanded, provider.ExpandCollapseState, "Unexpected ExpandCollapseState!"));
        }
        public virtual void TreeViewItemPeerCollapseCollapsed()
        {
            TreeViewItem item = new TreeViewItem {
                ItemsSource = new int[] { 1, 2, 3 }
            };
            TreeViewItemAutomationPeer peer     = null;
            IExpandCollapseProvider    provider = null;

            TestAsync(
                item,
                () => peer     = FrameworkElementAutomationPeer.CreatePeerForElement(item) as TreeViewItemAutomationPeer,
                () => provider = peer.GetPattern(PatternInterface.ExpandCollapse) as IExpandCollapseProvider,
                () => provider.Collapse(),
                () => Assert.IsFalse(item.IsExpanded, "Item should be collapsed!"));
        }
        public virtual void TreeViewItemPeerGetWithItems()
        {
            TreeViewItem item = new TreeViewItem {
                ItemsSource = new int[] { 1, 2, 3 }
            };
            TreeViewItemAutomationPeer peer  = null;
            List <AutomationPeer>      items = null;

            TestAsync(
                item,
                () => peer  = FrameworkElementAutomationPeer.CreatePeerForElement(item) as TreeViewItemAutomationPeer,
                () => items = peer.GetChildren(),
                () => Assert.AreEqual(3, items.Count, "Unexpected number of child peers!"),
                () => Assert.IsInstanceOfType(items[0], typeof(TreeViewItemAutomationPeer), "Child peer is not a TreeViewItemAutomationPeer!"));
        }
예제 #17
0
        private static void OnIsExpandedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            TreeViewItem item       = (TreeViewItem)d;
            bool         isExpanded = (bool)e.NewValue;

            TreeView tv = item.ParentTreeView;

            if (tv != null)
            {
                if (!isExpanded)
                {
                    tv.HandleSelectionAndCollapsed(item);
                }
            }

            ItemsPresenter itemsHostPresenter = item.ItemsHostPresenter;

            if (itemsHostPresenter != null)
            {
                // In case a TreeViewItem that wasn't previously expanded is now
                // recycled to represent an entity that is expanded or viceversa, we
                // face a situation where we need to synchronously remeasure the
                // sub tree through the ItemsPresenter leading up to the ItemsHost
                // panel. If we didnt do this the offsets could get skewed.
                item.InvalidateMeasure();
                Helper.InvalidateMeasureOnPath(itemsHostPresenter, item, false /*duringMeasure*/);
            }

            TreeViewItemAutomationPeer peer = UIElementAutomationPeer.FromElement(item) as TreeViewItemAutomationPeer;

            if (peer != null)
            {
                peer.RaiseExpandCollapseAutomationEvent((bool)e.OldValue, isExpanded);
            }

            if (isExpanded)
            {
                item.OnExpanded(new RoutedEventArgs(ExpandedEvent, item));
            }
            else
            {
                item.OnCollapsed(new RoutedEventArgs(CollapsedEvent, item));
            }

            item.UpdateVisualState();
        }
        // Token: 0x060058FA RID: 22778 RVA: 0x00189D6C File Offset: 0x00187F6C
        private static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            TreeViewItem treeViewItem = (TreeViewItem)d;
            bool         flag         = (bool)e.NewValue;

            treeViewItem.Select(flag);
            TreeViewItemAutomationPeer treeViewItemAutomationPeer = UIElementAutomationPeer.FromElement(treeViewItem) as TreeViewItemAutomationPeer;

            if (treeViewItemAutomationPeer != null)
            {
                treeViewItemAutomationPeer.RaiseAutomationIsSelectedChanged(flag);
            }
            if (flag)
            {
                treeViewItem.OnSelected(new RoutedEventArgs(TreeViewItem.SelectedEvent, treeViewItem));
            }
            else
            {
                treeViewItem.OnUnselected(new RoutedEventArgs(TreeViewItem.UnselectedEvent, treeViewItem));
            }
            treeViewItem.UpdateVisualState();
        }
        public virtual void TreeViewItemPeerOnlySupportsScrollingAndSelection()
        {
            TreeViewItem item = new TreeViewItem();
            TreeViewItemAutomationPeer peer = null;

            TestAsync(
                item,
                () => peer = FrameworkElementAutomationPeer.CreatePeerForElement(item) as TreeViewItemAutomationPeer,
                () => Assert.IsNull(peer.GetPattern(PatternInterface.Dock), "TreeViewItemAutomationPeer should not support the Dock pattern!"),
                () => Assert.IsNull(peer.GetPattern(PatternInterface.Grid), "TreeViewItemAutomationPeer should not support the Grid pattern!"),
                () => Assert.IsNull(peer.GetPattern(PatternInterface.GridItem), "TreeViewItemAutomationPeer should not support the GridItem pattern!"),
                () => Assert.IsNull(peer.GetPattern(PatternInterface.Invoke), "TreeViewItemAutomationPeer should not support the Dock pattern!"),
                () => Assert.IsNull(peer.GetPattern(PatternInterface.MultipleView), "TreeViewItemAutomationPeer should not support the MultipleView pattern!"),
                () => Assert.IsNull(peer.GetPattern(PatternInterface.RangeValue), "TreeViewItemAutomationPeer should not support the RangeValue pattern!"),
                () => Assert.IsNull(peer.GetPattern(PatternInterface.Scroll), "TreeViewItemAutomationPeer should not support the Scroll pattern!"),
                () => Assert.IsNull(peer.GetPattern(PatternInterface.Selection), "TreeViewItemAutomationPeer should not support the Selection pattern!"),
                () => Assert.IsNull(peer.GetPattern(PatternInterface.Table), "TreeViewItemAutomationPeer should not support the Table pattern!"),
                () => Assert.IsNull(peer.GetPattern(PatternInterface.TableItem), "TreeViewItemAutomationPeer should not support the TableItem pattern!"),
                () => Assert.IsNull(peer.GetPattern(PatternInterface.Toggle), "TreeViewItemAutomationPeer should not support the Toggle pattern!"),
                () => Assert.IsNull(peer.GetPattern(PatternInterface.Transform), "TreeViewItemAutomationPeer should not support the Transform pattern!"),
                () => Assert.IsNull(peer.GetPattern(PatternInterface.Value), "TreeViewItemAutomationPeer should not support the Value pattern!"),
                () => Assert.IsNull(peer.GetPattern(PatternInterface.Window), "TreeViewItemAutomationPeer should not support the Window pattern!"));
        }
예제 #20
0
파일: TreeView.cs 프로젝트: ash2005/z
        internal void ChangeSelection(object data, TreeViewItem container, bool selected)
        {
            if (IsSelectionChangeActive)
            {
                return;
            }

            object       oldValue     = null;
            object       newValue     = null;
            bool         changed      = false;
            TreeViewItem oldContainer = _selectedContainer; // Saved for the automation event

            IsSelectionChangeActive = true;

            try
            {
                if (selected)
                {
                    if (container != _selectedContainer)
                    {
                        oldValue = SelectedItem;
                        newValue = data;

                        if (_selectedContainer != null)
                        {
                            _selectedContainer.IsSelected = false;
                            _selectedContainer.UpdateContainsSelection(false);
                        }
                        _selectedContainer = container;
                        _selectedContainer.UpdateContainsSelection(true);
                        SetSelectedItem(data);
                        UpdateSelectedValue(data);
                        changed = true;
                    }
                }
                else
                {
                    if (container == _selectedContainer)
                    {
                        _selectedContainer.UpdateContainsSelection(false);
                        _selectedContainer = null;
                        SetSelectedItem(null);

                        oldValue = data;
                        changed  = true;
                    }
                }

                if (container.IsSelected != selected)
                {
                    container.IsSelected = selected;
                }
            }
            finally
            {
                IsSelectionChangeActive = false;
            }

            if (changed)
            {
                if (_selectedContainer != null &&
                    AutomationPeer.ListenerExists(AutomationEvents.SelectionItemPatternOnElementSelected))
                {
                    TreeViewItemAutomationPeer peer = UIElementAutomationPeer.CreatePeerForElement(_selectedContainer) as TreeViewItemAutomationPeer;
                    if (peer != null)
                    {
                        peer.RaiseAutomationSelectionEvent(AutomationEvents.SelectionItemPatternOnElementSelected);
                    }
                }

                if (oldContainer != null &&
                    AutomationPeer.ListenerExists(AutomationEvents.SelectionItemPatternOnElementRemovedFromSelection))
                {
                    TreeViewItemAutomationPeer peer = UIElementAutomationPeer.CreatePeerForElement(oldContainer) as TreeViewItemAutomationPeer;
                    if (peer != null)
                    {
                        peer.RaiseAutomationSelectionEvent(AutomationEvents.SelectionItemPatternOnElementRemovedFromSelection);
                    }
                }

                RoutedPropertyChangedEventArgs <object> e = new RoutedPropertyChangedEventArgs <object>(oldValue, newValue, SelectedItemChangedEvent);
                OnSelectedItemChanged(e);
            }
        }
예제 #21
0
        // Token: 0x060058D5 RID: 22741 RVA: 0x00189170 File Offset: 0x00187370
        internal void ChangeSelection(object data, TreeViewItem container, bool selected)
        {
            if (this.IsSelectionChangeActive)
            {
                return;
            }
            object       oldValue          = null;
            object       newValue          = null;
            bool         flag              = false;
            TreeViewItem selectedContainer = this._selectedContainer;

            this.IsSelectionChangeActive = true;
            try
            {
                if (selected)
                {
                    if (container != this._selectedContainer)
                    {
                        oldValue = this.SelectedItem;
                        newValue = data;
                        if (this._selectedContainer != null)
                        {
                            this._selectedContainer.IsSelected = false;
                            this._selectedContainer.UpdateContainsSelection(false);
                        }
                        this._selectedContainer = container;
                        this._selectedContainer.UpdateContainsSelection(true);
                        this.SetSelectedItem(data);
                        this.UpdateSelectedValue(data);
                        flag = true;
                    }
                }
                else if (container == this._selectedContainer)
                {
                    this._selectedContainer.UpdateContainsSelection(false);
                    this._selectedContainer = null;
                    this.SetSelectedItem(null);
                    this.UpdateSelectedValue(null);
                    oldValue = data;
                    flag     = true;
                }
                if (container.IsSelected != selected)
                {
                    container.IsSelected = selected;
                }
            }
            finally
            {
                this.IsSelectionChangeActive = false;
            }
            if (flag)
            {
                if (this._selectedContainer != null && AutomationPeer.ListenerExists(AutomationEvents.SelectionItemPatternOnElementSelected))
                {
                    TreeViewItemAutomationPeer treeViewItemAutomationPeer = UIElementAutomationPeer.CreatePeerForElement(this._selectedContainer) as TreeViewItemAutomationPeer;
                    if (treeViewItemAutomationPeer != null)
                    {
                        treeViewItemAutomationPeer.RaiseAutomationSelectionEvent(AutomationEvents.SelectionItemPatternOnElementSelected);
                    }
                }
                if (selectedContainer != null && AutomationPeer.ListenerExists(AutomationEvents.SelectionItemPatternOnElementRemovedFromSelection))
                {
                    TreeViewItemAutomationPeer treeViewItemAutomationPeer2 = UIElementAutomationPeer.CreatePeerForElement(selectedContainer) as TreeViewItemAutomationPeer;
                    if (treeViewItemAutomationPeer2 != null)
                    {
                        treeViewItemAutomationPeer2.RaiseAutomationSelectionEvent(AutomationEvents.SelectionItemPatternOnElementRemovedFromSelection);
                    }
                }
                RoutedPropertyChangedEventArgs <object> e = new RoutedPropertyChangedEventArgs <object>(oldValue, newValue, TreeView.SelectedItemChangedEvent);
                this.OnSelectedItemChanged(e);
            }
        }