Exemplo n.º 1
0
        public bool GetScrollPositionToShowCell(Position position, List <int> columns, List <int> rows, out Point newScrollPosition)
        {
            newScrollPosition = m_Grid.CustomScrollPosition;
            if (!m_Grid.IsPositionValid(position))
            {
                return(false);
            }

            CellPositionType posType          = m_Grid.GetPositionType(position);
            Rectangle        displayRectangle = m_Grid.DisplayRectangle;

            bool isFixedLeft = posType == CellPositionType.FixedLeft || posType == CellPositionType.FixedTopLeft;
            int  x           = m_Grid.CustomScrollPosition.X;

            if (!columns.Contains(position.Column))
            {
                if (isFixedLeft)
                {
                    x = 0;
                }
                else if (columns.Count > m_Grid.ActualFixedColumns)
                {
                    if (position.Column < columns[m_Grid.ActualFixedColumns])
                    {
                        x = m_Grid.Columns.GetAbsoluteLeft(position.Column) - m_Grid.GetFixedAreaWidth();
                    }
                    else
                    {
                        x = m_Grid.Columns.GetAbsoluteRight(position.Column) - displayRectangle.Width;
                    }
                }
                else
                {
                    x = m_Grid.Columns.GetAbsoluteLeft(position.Column) - m_Grid.GetFixedAreaWidth();
                }
            }

            bool isFixedTop = posType == CellPositionType.FixedTop || posType == CellPositionType.FixedTopLeft;
            int  y          = m_Grid.CustomScrollPosition.Y;

            if (!rows.Contains(position.Row))
            {
                if (isFixedTop)
                {
                    y = 0;
                }
                else if (rows.Count > m_Grid.ActualFixedRows)
                {
                    if (position.Row < rows[m_Grid.ActualFixedRows])
                    {
                        y = m_Grid.Rows.GetAbsoluteTop(position.Row) - m_Grid.GetFixedAreaHeight();
                    }
                    else
                    {
                        y = m_Grid.Rows.GetAbsoluteBottom(position.Row) - displayRectangle.Height;
                    }
                }
                else
                {
                    y = m_Grid.Rows.GetAbsoluteTop(position.Row) - m_Grid.GetFixedAreaHeight();
                }
            }

            newScrollPosition = new Point(x, y);

            return(true);
        }