Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Controls / ItemsPanelTemplate.cs / 1305600 / 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)
TemplateContent templateHolder = Template as TemplateContent;
System.Xaml.XamlType panelType = templateHolder.SchemaContext.GetXamlType(typeof(Panel));
if (templateHolder.RootType == null || !templateHolder.RootType.CanAssignTo(panelType))
{
throw new InvalidOperationException(SR.Get(SRID.ItemsPanelNotAPanel, templateHolder.RootType));
}
}
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.
//----------------------------------------------------------------------------
//
//
// 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)
TemplateContent templateHolder = Template as TemplateContent;
System.Xaml.XamlType panelType = templateHolder.SchemaContext.GetXamlType(typeof(Panel));
if (templateHolder.RootType == null || !templateHolder.RootType.CanAssignTo(panelType))
{
throw new InvalidOperationException(SR.Get(SRID.ItemsPanelNotAPanel, templateHolder.RootType));
}
}
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

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ProxyManager.cs
- JournalEntry.cs
- ConfigurationValues.cs
- TextRangeBase.cs
- DataGridViewComboBoxCell.cs
- TypeConverter.cs
- DefaultMergeHelper.cs
- QueryOperationResponseOfT.cs
- SrgsElementList.cs
- ByteAnimation.cs
- LedgerEntry.cs
- SingleStorage.cs
- Rotation3DAnimationBase.cs
- SafeNativeMethods.cs
- OdbcConnectionStringbuilder.cs
- ConfigPathUtility.cs
- InvalidProgramException.cs
- XmlMemberMapping.cs
- SqlBulkCopyColumnMappingCollection.cs
- TranslateTransform3D.cs
- CoreSwitches.cs
- RoutedEventConverter.cs
- SchemaImporterExtension.cs
- XmlSignatureProperties.cs
- DataObject.cs
- XmlBaseReader.cs
- NegotiateStream.cs
- ConfigXmlReader.cs
- CustomPopupPlacement.cs
- Rfc2898DeriveBytes.cs
- HMACMD5.cs
- InkSerializer.cs
- StrokeDescriptor.cs
- ModelItemCollectionImpl.cs
- Utils.cs
- MatchingStyle.cs
- SqlClientPermission.cs
- AppSettingsExpressionEditor.cs
- XdrBuilder.cs
- KeyPressEvent.cs
- NetWebProxyFinder.cs
- SqlPersonalizationProvider.cs
- FeatureSupport.cs
- EncodingInfo.cs
- SmiEventSink.cs
- CompilationLock.cs
- HelpKeywordAttribute.cs
- XamlParser.cs
- ButtonChrome.cs
- AudioBase.cs
- EUCJPEncoding.cs
- SettingsPropertyWrongTypeException.cs
- WorkflowOperationContext.cs
- AdjustableArrowCap.cs
- NamedPipeTransportSecurityElement.cs
- MetadataUtilsSmi.cs
- HatchBrush.cs
- KnownAssemblyEntry.cs
- WaitForChangedResult.cs
- BrowserInteropHelper.cs
- ProcessModelSection.cs
- AutomationAttributeInfo.cs
- TitleStyle.cs
- DBNull.cs
- XmlSchemaComplexContentRestriction.cs
- WebPartDisplayModeCollection.cs
- FlowDocumentPageViewerAutomationPeer.cs
- ListSortDescriptionCollection.cs
- AspProxy.cs
- MessageAction.cs
- ClaimComparer.cs
- DataGridViewLayoutData.cs
- DataGridViewUtilities.cs
- SqlDependencyUtils.cs
- TabControlAutomationPeer.cs
- XPathBinder.cs
- KeyConverter.cs
- AppSettingsExpressionBuilder.cs
- Exception.cs
- OptimizedTemplateContent.cs
- SqlDuplicator.cs
- FtpRequestCacheValidator.cs
- CompilerWrapper.cs
- RectKeyFrameCollection.cs
- PageRanges.cs
- RadioButtonRenderer.cs
- SmiEventStream.cs
- SapiRecoInterop.cs
- CopyOnWriteList.cs
- ScriptControlDescriptor.cs
- XmlnsCompatibleWithAttribute.cs
- IIS7UserPrincipal.cs
- TraceContext.cs
- RadioButtonBaseAdapter.cs
- SmiEventSink_DeferedProcessing.cs
- COM2IDispatchConverter.cs
- mansign.cs
- SQLBytes.cs
- SqlParameterizer.cs
- HasCopySemanticsAttribute.cs