コード例 #1
0
        internal DataGridGroupItemAutomationPeer GetOrCreateGroupItemPeer(object group)
        {
            DataGridGroupItemAutomationPeer peer = null;

            if (group != null)
            {
                if (_groupItemPeers.ContainsKey(group))
                {
                    peer = _groupItemPeers[group];
                }
                else
                {
                    peer = new DataGridGroupItemAutomationPeer(group as CollectionViewGroup, this.OwningDataGrid);
                    _groupItemPeers.Add(group, peer);
                }

                DataGridRowGroupHeaderAutomationPeer rghPeer = peer.OwningRowGroupHeaderPeer;
                if (rghPeer != null)
                {
                    rghPeer.EventsSource = peer;
                }
            }

            return(peer);
        }
コード例 #2
0
        internal void PopulateGroupItemPeers()
        {
            Dictionary <object, DataGridGroupItemAutomationPeer> oldChildren = new Dictionary <object, DataGridGroupItemAutomationPeer>(_groupItemPeers);

            _groupItemPeers.Clear();

            if (this.OwningDataGrid.DataConnection.CollectionView != null &&
                this.OwningDataGrid.DataConnection.CollectionView.CanGroup &&
                this.OwningDataGrid.DataConnection.CollectionView.Groups != null &&
                this.OwningDataGrid.DataConnection.CollectionView.Groups.Count > 0)
            {
                List <object> groups = new List <object>(this.OwningDataGrid.DataConnection.CollectionView.Groups);
                while (groups.Count > 0)
                {
                    CollectionViewGroup cvGroup = groups[0] as CollectionViewGroup;
                    groups.RemoveAt(0);
                    if (cvGroup != null)
                    {
                        // Add the group's peer to the collection
                        DataGridGroupItemAutomationPeer peer = null;

                        if (oldChildren.ContainsKey(cvGroup))
                        {
                            peer = oldChildren[cvGroup] as DataGridGroupItemAutomationPeer;
                        }
                        else
                        {
                            peer = new DataGridGroupItemAutomationPeer(cvGroup, this.OwningDataGrid);
                        }

                        if (peer != null)
                        {
                            DataGridRowGroupHeaderAutomationPeer rghPeer = peer.OwningRowGroupHeaderPeer;
                            if (rghPeer != null)
                            {
                                rghPeer.EventsSource = peer;
                            }
                        }

                        // This guards against the addition of duplicate items
                        if (!_groupItemPeers.ContainsKey(cvGroup))
                        {
                            _groupItemPeers.Add(cvGroup, peer);
                        }

                        // Look for any sub groups
                        if (!cvGroup.IsBottomLevel)
                        {
                            int position = 0;
                            foreach (object subGroup in cvGroup.Items)
                            {
                                groups.Insert(position, subGroup);
                                position++;
                            }
                        }
                    }
                }
            }
        }
コード例 #3
0
        public void DataGridGroupItem_ISelectionProvider()
        {
            PagedCollectionView customers = CreateGroupedCustomerCollectionView();
            DataGrid dataGrid = new DataGrid();
            Assert.IsNotNull(dataGrid);
            isLoaded = false;
            dataGrid.Width = 350;
            dataGrid.Height = 250;
            dataGrid.Loaded += new RoutedEventHandler(dataGrid_Loaded);
            dataGrid.AutoGenerateColumns = true;
            dataGrid.ItemsSource = customers;

            TestPanel.Children.Add(dataGrid);
            EnqueueConditional(delegate { return isLoaded; });
            this.EnqueueYieldThread();

            AutomationPeer peer;
            ISelectionProvider selector = null;
            TestPeer testPeer = new TestPeer(dataGrid);

            EnqueueCallback(delegate
            {
                CollectionViewGroup group = customers.Groups[1] as CollectionViewGroup;
                Assert.IsNotNull(group, "PagedCollectionView did not return CollectionViewGroup");
                peer = new DataGridGroupItemAutomationPeer(group, dataGrid);
                Assert.IsNotNull(peer);
                selector = peer.GetPattern(PatternInterface.Selection) as ISelectionProvider;
                Assert.IsNotNull(selector);
                Assert.AreEqual(0, selector.GetSelection().Length, "There should not be any selected items within this group");

                // Select an item within group 1
                peer = new DataGridItemAutomationPeer(customers[3], dataGrid);
                Assert.IsNotNull(peer);
                ISelectionItemProvider selectionItem = peer.GetPattern(PatternInterface.SelectionItem) as ISelectionItemProvider;
                Assert.IsNotNull(selectionItem);
                selectionItem.AddToSelection();
            });
            this.EnqueueYieldThread();

            EnqueueCallback(delegate
            {
                Assert.IsNotNull(selector);
                Assert.AreEqual(1, selector.GetSelection().Length, "There should be a single selected item within this group");
                peer = testPeer.GetPeerFromProvider(selector.GetSelection()[0]);
                Assert.AreEqual(typeof(DataGridRow).Name, peer.GetClassName(), "GetSelection did not return DataGridRow");
            });
            this.EnqueueYieldThread();

            EnqueueTestComplete();
        }
コード例 #4
0
        public void DataGridGroupItem_IScrollItemProvider()
        {
            PagedCollectionView customers = CreateGroupedCustomerCollectionView();
            DataGrid dataGrid = new DataGrid();
            Assert.IsNotNull(dataGrid);
            isLoaded = false;
            dataGrid.Width = 350;
            dataGrid.Height = 250;
            dataGrid.Loaded += new RoutedEventHandler(dataGrid_Loaded);
            dataGrid.AutoGenerateColumns = true;
            dataGrid.ItemsSource = customers;

            TestPanel.Children.Add(dataGrid);
            EnqueueConditional(delegate { return isLoaded; });
            this.EnqueueYieldThread();

            AutomationPeer peer;
            IScrollItemProvider scrollItem;
            CollectionViewGroup group = null;

            int index = customers.Groups.Count;
            for (int i = 0; i < customers.Groups.Count; i++)
            {
                EnqueueCallback(delegate
                {
                    index--;
                    group = customers.Groups[index] as CollectionViewGroup;
                    Assert.IsNotNull(group, "PagedCollectionView did not return CollectionViewGroup");
                    peer = new DataGridGroupItemAutomationPeer(group, dataGrid);
                    Assert.IsNotNull(peer);
                    scrollItem = peer.GetPattern(PatternInterface.ScrollItem) as IScrollItemProvider;
                    Assert.IsNotNull(scrollItem);
                    scrollItem.ScrollIntoView();
                });
                this.EnqueueYieldThread();

                EnqueueCallback(delegate
                {
                    int groupSlot = -1;
                    foreach (int slot in dataGrid.RowGroupHeadersTable.GetIndexes())
                    {
                        DataGridRowGroupInfo info = dataGrid.RowGroupHeadersTable.GetValueAt(slot);
                        if (info.CollectionViewGroup == group)
                        {
                            groupSlot = slot;
                            break;
                        }
                    }
                    Assert.AreNotEqual(-1, groupSlot, "CollectionViewGroup was not found in DataGrid");
                    Assert.IsTrue(dataGrid.IsSlotVisible(groupSlot), "GroupItem not scrolled into view");
                });
            }
            EnqueueTestComplete();
        }
コード例 #5
0
        public void DataGridGroupItem_IGridProvider()
        {
            PagedCollectionView customers = CreateGroupedCustomerCollectionView();
            DataGrid dataGrid = new DataGrid();
            Assert.IsNotNull(dataGrid);
            isLoaded = false;
            dataGrid.Width = 350;
            dataGrid.Height = 250;
            dataGrid.Loaded += new RoutedEventHandler(dataGrid_Loaded);
            dataGrid.AutoGenerateColumns = true;
            dataGrid.ItemsSource = customers;

            TestPeer testPeer = new TestPeer(dataGrid);
            Assert.IsNotNull(testPeer);

            TestPanel.Children.Add(dataGrid);
            EnqueueConditional(delegate { return isLoaded; });
            this.EnqueueYieldThread();

            IGridProvider gridProvider = null;
            IRawElementProviderSimple item = null;
            EnqueueCallback(delegate
            {
                CollectionViewGroup group = customers.Groups[1] as CollectionViewGroup;
                Assert.IsNotNull(group, "PagedCollectionView did not return CollectionViewGroup");
                AutomationPeer peer = new DataGridGroupItemAutomationPeer(group, dataGrid);
                Assert.IsNotNull(peer);
                gridProvider = peer.GetPattern(PatternInterface.Grid) as IGridProvider;
                Assert.IsNotNull(gridProvider);

                Assert.AreEqual(7, gridProvider.RowCount, "Incorrect RowCount value");
                Assert.AreEqual(dataGrid.Columns.Count, gridProvider.ColumnCount, "Incorrect ColumnCount value");

                item = gridProvider.GetItem(5, 2);
                Assert.IsNotNull(item, "GetItem returned null for valid cell");
                AutomationPeer itemPeer = testPeer.GetPeerFromProvider(item);
                Assert.AreEqual(typeof(DataGridCell).Name, itemPeer.GetClassName(), "GetItem did not return DataGridCell");

                item = gridProvider.GetItem(100, 100);
                Assert.IsNull(item, "GetItem returned object for invalid cell");
            });
            this.EnqueueYieldThread();
            this.EnqueueCallback(delegate
            {
                // Collapse the group and check that GetItem still works
                dataGrid.CollapseRowGroup(customers.Groups[1] as CollectionViewGroup, true);
            });
            this.EnqueueYieldThread();
            this.EnqueueCallback(delegate
            {
                Assert.IsNotNull(gridProvider);
                item = gridProvider.GetItem(5, 2);
                Assert.IsNotNull(item, "GetItem returned null for valid cell");
                AutomationPeer itemPeer = testPeer.GetPeerFromProvider(item);
                Assert.AreEqual(typeof(DataGridCell).Name, itemPeer.GetClassName(), "GetItem did not return DataGridCell");
                
            });
            EnqueueTestComplete();
        }
コード例 #6
0
        public void DataGridGroupItem_IExpandCollapseProvider()
        {
            PagedCollectionView customers = CreateGroupedCustomerCollectionView();
            DataGrid dataGrid = new DataGrid();
            Assert.IsNotNull(dataGrid);
            isLoaded = false;
            dataGrid.Width = 350;
            dataGrid.Height = 250;
            dataGrid.Loaded += new RoutedEventHandler(dataGrid_Loaded);
            dataGrid.AutoGenerateColumns = true;
            dataGrid.ItemsSource = customers;

            CollectionViewGroup group = null;
            IExpandCollapseProvider expandCollapseProvider = null;
            TestPeer testPeer = new TestPeer(dataGrid);
            Assert.IsNotNull(testPeer);

            TestPanel.Children.Add(dataGrid);
            EnqueueConditional(delegate { return isLoaded; });
            this.EnqueueYieldThread();

            EnqueueCallback(delegate
            {
                group = customers.Groups[1] as CollectionViewGroup;
                Assert.IsNotNull(group, "PagedCollectionView did not return CollectionViewGroup");
                AutomationPeer peer = new DataGridGroupItemAutomationPeer(group, dataGrid);
                Assert.IsNotNull(peer);
                expandCollapseProvider = peer.GetPattern(PatternInterface.ExpandCollapse) as IExpandCollapseProvider;
                Assert.IsNotNull(expandCollapseProvider);

                Assert.AreEqual(Visibility.Visible, dataGrid.RowGroupInfoFromCollectionViewGroup(group).Visibility, "Group should be expanded");
                Assert.AreEqual(ExpandCollapseState.Expanded, expandCollapseProvider.ExpandCollapseState, "Group should be expanded");

                expandCollapseProvider.Collapse();
            });
            this.EnqueueYieldThread();

            EnqueueCallback(delegate
            {
                Assert.IsNotNull(expandCollapseProvider);
                Assert.AreEqual(Visibility.Collapsed, dataGrid.RowGroupInfoFromCollectionViewGroup(group).Visibility, "Group should be collapsed");
                Assert.AreEqual(ExpandCollapseState.Collapsed, expandCollapseProvider.ExpandCollapseState, "Group should be collapsed");

                expandCollapseProvider.Expand();
            });
            this.EnqueueYieldThread();

            EnqueueCallback(delegate
            {
                Assert.IsNotNull(expandCollapseProvider);
                Assert.AreEqual(Visibility.Visible, dataGrid.RowGroupInfoFromCollectionViewGroup(group).Visibility, "Group should be expanded");
                Assert.AreEqual(ExpandCollapseState.Expanded, expandCollapseProvider.ExpandCollapseState, "Group should be expanded");
            });
            EnqueueTestComplete();
        }
コード例 #7
0
        public void DataGridGroupItem_AutomationPeer()
        {
            PagedCollectionView customers = CreateGroupedCustomerCollectionView();
            DataGrid dataGrid = new DataGrid();
            Assert.IsNotNull(dataGrid);
            isLoaded = false;
            dataGrid.Width = 350;
            dataGrid.Height = 250;
            dataGrid.Loaded += new RoutedEventHandler(dataGrid_Loaded);
            dataGrid.AutoGenerateColumns = true;
            dataGrid.ItemsSource = customers;

            TestPanel.Children.Add(dataGrid);
            EnqueueConditional(delegate { return isLoaded; });
            this.EnqueueYieldThread();

            EnqueueCallback(delegate
            {
                CollectionViewGroup group = customers.Groups[0] as CollectionViewGroup;
                Assert.IsNotNull(group, "PagedCollectionView did not return CollectionViewGroup");
                AutomationPeer peer = new DataGridGroupItemAutomationPeer(group, dataGrid);
                Assert.IsNotNull(peer);
                Assert.AreEqual(AutomationControlType.Group, peer.GetAutomationControlType(), "Incorrect ControlType value");
                Assert.AreEqual(true, peer.IsContentElement(), "Incorrect IsContentElement value");
                Assert.AreEqual(true, peer.IsControlElement(), "Incorrect IsControlElement value");
                Assert.AreEqual(false, peer.IsKeyboardFocusable(), "Incorrect IsKeyBoardFocusable value");
                Assert.AreEqual(group.Name, peer.GetName(), "Incorrect Name value");
                Assert.IsNotNull(peer.GetChildren(), "GetChildren should never return null");
            });

            EnqueueTestComplete();
        }
コード例 #8
0
        internal void PopulateGroupItemPeers()
        {
            Dictionary<object, DataGridGroupItemAutomationPeer> oldChildren = new Dictionary<object, DataGridGroupItemAutomationPeer>(_groupItemPeers);
            _groupItemPeers.Clear();

            if (this.OwningDataGrid.DataConnection.CollectionView != null
                && this.OwningDataGrid.DataConnection.CollectionView.CanGroup
                && this.OwningDataGrid.DataConnection.CollectionView.Groups != null
                && this.OwningDataGrid.DataConnection.CollectionView.Groups.Count > 0)
            {
                List<object> groups = new List<object>(this.OwningDataGrid.DataConnection.CollectionView.Groups);
                while (groups.Count > 0)
                {
                    CollectionViewGroup cvGroup = groups[0] as CollectionViewGroup;
                    groups.RemoveAt(0);
                    if (cvGroup != null)
                    {
                        // Add the group's peer to the collection
                        DataGridGroupItemAutomationPeer peer = null;

                        if (oldChildren.ContainsKey(cvGroup))
                        {
                            peer = oldChildren[cvGroup] as DataGridGroupItemAutomationPeer;
                        }
                        else
                        {
                            peer = new DataGridGroupItemAutomationPeer(cvGroup, this.OwningDataGrid);
                        }

                        if (peer != null)
                        {
                            DataGridRowGroupHeaderAutomationPeer rghPeer = peer.OwningRowGroupHeaderPeer;
                            if (rghPeer != null)
                            {
                                rghPeer.EventsSource = peer;
                            }
                        }

                        // This guards against the addition of duplicate items
                        if (!_groupItemPeers.ContainsKey(cvGroup))
                        {
                            _groupItemPeers.Add(cvGroup, peer);
                        }

                        // Look for any sub groups
                        if (!cvGroup.IsBottomLevel)
                        {
                            int position = 0;
                            foreach (object subGroup in cvGroup.Items)
                            {
                                groups.Insert(position, subGroup);
                                position++;
                            }
                        }
                    }
                }
            }
        }
コード例 #9
0
        internal DataGridGroupItemAutomationPeer GetOrCreateGroupItemPeer(object group)
        {
            DataGridGroupItemAutomationPeer peer = null;

            if (group != null)
            {
                if (_groupItemPeers.ContainsKey(group))
                {
                    peer = _groupItemPeers[group];
                }
                else
                {
                    peer = new DataGridGroupItemAutomationPeer(group as CollectionViewGroup, this.OwningDataGrid);
                    _groupItemPeers.Add(group, peer);
                }

                DataGridRowGroupHeaderAutomationPeer rghPeer = peer.OwningRowGroupHeaderPeer;
                if (rghPeer != null)
                {
                    rghPeer.EventsSource = peer;
                }
            }

            return peer;
        }