DataGridRowsPresenter.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Controls / Primitives / DataGridRowsPresenter.cs / 1305600 / DataGridRowsPresenter.cs

                            //---------------------------------------------------------------------------- 
//
// Copyright (C) Microsoft Corporation.  All rights reserved.
//
//--------------------------------------------------------------------------- 

using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel;
using System.Windows; 
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Threading;
using MS.Internal; 

namespace System.Windows.Controls.Primitives 
{ 
    /// 
    /// Panel that lays out individual rows top to bottom. 
    /// 
    public class DataGridRowsPresenter : VirtualizingStackPanel
    {
        #region Scroll Methods 

        ///  
        ///     Calls the protected method BringIndexIntoView. 
        /// 
        /// The index of the row to scroll into view. 
        /// 
        ///     BringIndexIntoView should be callable either from the ItemsControl
        ///     or directly on the panel. This was not done in WPF, so we are
        ///     building this internally for the DataGrid. However, if a public 
        ///     way of calling BringIndexIntoView becomes a reality, then
        ///     this method is no longer needed. 
        ///  
        internal void InternalBringIndexIntoView(int index)
        { 
            BringIndexIntoView(index);
        }

        ///  
        ///     This method is invoked when the IsItemsHost property changes.
        ///  
        /// The old value of the IsItemsHost property. 
        /// The new value of the IsItemsHost property.
        protected override void OnIsItemsHostChanged(bool oldIsItemsHost, bool newIsItemsHost) 
        {
            base.OnIsItemsHostChanged(oldIsItemsHost, newIsItemsHost);

            if (newIsItemsHost) 
            {
                DataGrid dataGrid = Owner; 
                if (dataGrid != null) 
                {
                    // ItemsHost should be the "root" element which has 
                    // IsItemsHost = true on it.  In the case of grouping,
                    // IsItemsHost is true on all panels which are generating
                    // content.  Thus, we care only about the panel which
                    // is generating content for the ItemsControl. 
                    IItemContainerGenerator generator = dataGrid.ItemContainerGenerator as IItemContainerGenerator;
                    if (generator != null && generator == generator.GetItemContainerGeneratorForPanel(this)) 
                    { 
                        dataGrid.InternalItemsHost = this;
                    } 
                }
            }
            else
            { 
                // No longer the items host, clear out the property on the DataGrid
                if ((_owner != null) && (_owner.InternalItemsHost == this)) 
                { 
                    _owner.InternalItemsHost = null;
                } 

                _owner = null;
            }
        } 

        ///  
        ///     Override of ViewportSizeChanged method which enqueues a dispatcher operation to redistribute 
        ///     the width among columns.
        ///  
        /// viewport size before the change
        /// viewport size after the change
        protected override void OnViewportSizeChanged(Size oldViewportSize, Size newViewportSize)
        { 
            DataGrid dataGrid = Owner;
            if (dataGrid != null) 
            { 
                ScrollContentPresenter scrollContentPresenter = dataGrid.InternalScrollContentPresenter;
                if (scrollContentPresenter == null || scrollContentPresenter.CanContentScroll) 
                {
                    dataGrid.OnViewportSizeChanged(oldViewportSize, newViewportSize);
                }
            } 
        }
 
        #endregion 

        #region Column Virtualization 

        /// 
        ///     Measure
        ///  
        protected override Size MeasureOverride(Size constraint)
        { 
            _availableSize = constraint; 
            return base.MeasureOverride(constraint);
        } 

        /// 
        ///     Property which returns the last measure input size
        ///  
        internal Size AvailableSize
        { 
            get 
            {
                return _availableSize; 
            }
        }

        #endregion 

        #region Row Virtualization 
 
        /// 
        ///     Override method to suppress the cleanup of rows 
        ///     with validation errors.
        /// 
        /// 
        protected override void OnCleanUpVirtualizedItem(CleanUpVirtualizedItemEventArgs e) 
        {
            base.OnCleanUpVirtualizedItem(e); 
 
            if (e.UIElement != null &&
                Validation.GetHasError(e.UIElement)) 
            {
                e.Cancel = true;
            }
        } 

        #endregion 
 
        #region Helpers
 
        internal DataGrid Owner
        {
            get
            { 
                if (_owner == null)
                { 
                    _owner = ItemsControl.GetItemsOwner(this) as DataGrid; 
                }
 
                return _owner;
            }
        }
 
        #endregion
 
        #region Data 

        private DataGrid _owner; 
        private Size _availableSize;

        #endregion
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK