Example #1
0
        public Rectangle GetCellBounds(int row, CellView cell, bool includeMargin)
        {
            ExListViewItem item = ListView.ItemContainerGenerator.ContainerFromIndex (row) as ExListViewItem;
            if (item == null)
                return Rectangle.Zero;

            // this works only if the wpf layout remains the same
            try {
                var stackpanel = VisualTreeHelper.GetChild (item, 0);
                var border = VisualTreeHelper.GetChild (stackpanel, 0);
                var grid = VisualTreeHelper.GetChild (border, 0);
                var rowpresenter = VisualTreeHelper.GetChild (grid, 1) as FrameworkElement;

                if (VisualTreeHelper.GetChildrenCount (rowpresenter) != view.Columns.Count)
                    return Rectangle.Zero;

                var colpresenter =  VisualTreeHelper.GetChild (rowpresenter, cellViews [cell].ColumnIndex) as FrameworkElement;
                var colchild =  VisualTreeHelper.GetChild (colpresenter, 0) as FrameworkElement;

                if (cellViews [cell].Column.Views.Count > 1 && colchild is System.Windows.Controls.StackPanel) {
                    var childStack = colchild as System.Windows.Controls.StackPanel;
                    if (childStack == null || VisualTreeHelper.GetChildrenCount (childStack) < cellViews [cell].CellIndex)
                        return Rectangle.Zero;
                    var cellpresenter = VisualTreeHelper.GetChild (childStack, cellViews [cell].CellIndex) as FrameworkElement;
                    var position = cellpresenter.TransformToAncestor (ListView).Transform(new System.Windows.Point(-ListView.Padding.Left, 0));
                    var rect = new Rect (position, cellpresenter.RenderSize);
                    return rect.ToXwtRect ();
                } else {
                    var position = colchild.TransformToAncestor (ListView).Transform(new System.Windows.Point(-ListView.Padding.Left, 0));
                    var rect = new Rect (position, colchild.RenderSize);
                    return rect.ToXwtRect ();
                }
            } catch (ArgumentOutOfRangeException) {
                return Rectangle.Zero;
            } catch (ArgumentNullException) {
                return Rectangle.Zero;
            }
        }