ItemsPanelTemplate.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Framework / System / Windows / Controls / ItemsPanelTemplate.cs / 1 / ItemsPanelTemplate.cs

                            //---------------------------------------------------------------------------- 
//
// 
//    Copyright (C) Microsoft Corporation.  All rights reserved.
//  
//
// Description: ItemsPanelTemplate describes how ItemsPresenter creates the panel 
//     that manages layout of containers for an ItemsControl. 
//
// Specs: 
//
//---------------------------------------------------------------------------

using System.ComponentModel; 
using System.Windows.Controls;
using System.Windows.Markup; 
using System.Diagnostics; 

namespace System.Windows.Controls 
{
    /// 
    ///     ItemsPanelTemplate describes how ItemsPresenter creates the panel
    ///     that manages layout of containers for an ItemsControl. 
    /// 
    public class ItemsPanelTemplate : FrameworkTemplate 
    { 
        #region Constructors
 
        //-------------------------------------------------------------------
        //
        //  Constructors
        // 
        //-------------------------------------------------------------------
 
        ///  
        ///     ItemsPanelTemplate Constructor
        ///  
        public ItemsPanelTemplate()
        {
        }
 
        /// 
        ///     ItemsPanelTemplate Constructor 
        ///  
        public ItemsPanelTemplate(FrameworkElementFactory root)
        { 
            VisualTree = root;
        }

        #endregion Constructors 

        #region Public Properties 
 
        //--------------------------------------------------------------------
        // 
        //  Public Properties
        //
        //-------------------------------------------------------------------
 
        #endregion PublicProperties
 
        #region Internal Properties 

        //-------------------------------------------------------------------- 
        //
        //  Internal Properties
        //
        //-------------------------------------------------------------------- 

        // 
        //  TargetType for ItemsPanelTemplate. This is override is 
        //  so FrameworkTemplate can see this property.
        // 
        internal override Type TargetTypeInternal
        {
            get {  return DefaultTargetType; }
        } 

        // Subclasses must provide a way for the parser to directly set the 
        // target type.  For ItemsPanelTemplate, this is not allowed. 
        internal override void SetTargetTypeInternal(Type targetType)
        { 
            throw new InvalidOperationException(SR.Get(SRID.TemplateNotTargetType));
        }

        // Target type of ItemsPanelTemplate is ItemsPresenter 
        static internal Type DefaultTargetType
        { 
            get { return typeof(ItemsPresenter); } 
        }
 
        #endregion Internal Properties

        #region Internal Methods
 
        //-------------------------------------------------------------------
        // 
        //  Internal Methods 
        //
        //-------------------------------------------------------------------- 

        //
        // ProcessTemplateBeforeSeal
        // 
        // This is used in the case of templates defined with FEFs.  For templates
        // in Baml (the typical case), see the OnApply override. 
        // 
        // 1. Verify that
        //      a. root element is a Panel 
        // 2. Set IsItemsHost = true
        //

        internal override void ProcessTemplateBeforeSeal() 
        {
            FrameworkElementFactory root; 
 
            if( HasContent )
            { 
                // This is a Baml-style template

                // Validate the root type (it must be a Panel)
 
                if (!typeof(Panel).IsAssignableFrom(OptimizedTemplateContent.RootType))
                    throw new InvalidOperationException(SR.Get(SRID.ItemsPanelNotAPanel, OptimizedTemplateContent.RootType)); 
 
                // Set the IsItemsHost property on the root, via the template tables
 
                BamlNamedElementStartRecord bamlNamedElementStartRecord = OptimizedTemplateContent.UnsharedContent as BamlNamedElementStartRecord;

                SharedDp sharedDp = new SharedDp( Panel.IsItemsHostProperty, true, bamlNamedElementStartRecord.RuntimeName );
                OptimizedTemplateContent.SharedProperties.Add( sharedDp ); 
            }
 
            else if ((root = this.VisualTree) != null) 
            {
                // This is a FEF-style template 
                if (!typeof(Panel).IsAssignableFrom(root.Type))
                    throw new InvalidOperationException(SR.Get(SRID.ItemsPanelNotAPanel, root.Type));

                root.SetValue(Panel.IsItemsHostProperty, true); 
            }
        } 
 

        #endregion Internal Methods 

        #region Protected Methods

        //------------------------------------------------------------------- 
        //
        //  Protected Methods 
        // 
        //-------------------------------------------------------------------
 
        /// 
        ///     Validate against the following rules
        ///     1. Must have a non-null feTemplatedParent
        ///     2. A ItemsPanelTemplate must be applied to a ContentPresenter 
        /// 
        protected override void ValidateTemplatedParent(FrameworkElement templatedParent) 
        { 
            // Must have a non-null feTemplatedParent
            if (templatedParent == null) 
            {
                throw new ArgumentNullException("templatedParent");
            }
 
            // A ItemsPanelTemplate must be applied to an ItemsPresenter
            if (!(templatedParent is ItemsPresenter)) 
            { 
                throw new ArgumentException(SR.Get(SRID.TemplateTargetTypeMismatch, "ItemsPresenter", templatedParent.GetType().Name));
            } 
        }

        #endregion Protected Methods
    } 
}
 
 

// 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