Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Controls / DataGridTemplateColumn.cs / 1305600 / DataGridTemplateColumn.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // //--------------------------------------------------------------------------- using System; using System.ComponentModel; using System.Diagnostics; using System.Windows; using System.Windows.Data; namespace System.Windows.Controls { ////// A column definition that allows a developer to specify specific /// editing and non-editing templates. /// public class DataGridTemplateColumn : DataGridColumn { #region Constructors static DataGridTemplateColumn() { CanUserSortProperty.OverrideMetadata( typeof(DataGridTemplateColumn), new FrameworkPropertyMetadata(null, new CoerceValueCallback(OnCoerceTemplateColumnCanUserSort))); SortMemberPathProperty.OverrideMetadata( typeof(DataGridTemplateColumn), new FrameworkPropertyMetadata(new PropertyChangedCallback(OnTemplateColumnSortMemberPathChanged))); } #endregion #region Auto Sort private static void OnTemplateColumnSortMemberPathChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { DataGridTemplateColumn column = (DataGridTemplateColumn)d; column.CoerceValue(CanUserSortProperty); } private static object OnCoerceTemplateColumnCanUserSort(DependencyObject d, object baseValue) { DataGridTemplateColumn templateColumn = (DataGridTemplateColumn)d; if (string.IsNullOrEmpty(templateColumn.SortMemberPath)) { return false; } return DataGridColumn.OnCoerceCanUserSort(d, baseValue); } #endregion #region Templates ////// A template describing how to display data for a cell in this column. /// public DataTemplate CellTemplate { get { return (DataTemplate)GetValue(CellTemplateProperty); } set { SetValue(CellTemplateProperty, value); } } ////// The DependencyProperty representing the CellTemplate property. /// public static readonly DependencyProperty CellTemplateProperty = DependencyProperty.Register( "CellTemplate", typeof(DataTemplate), typeof(DataGridTemplateColumn), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(DataGridColumn.NotifyPropertyChangeForRefreshContent))); ////// A template selector describing how to display data for a cell in this column. /// public DataTemplateSelector CellTemplateSelector { get { return (DataTemplateSelector)GetValue(CellTemplateSelectorProperty); } set { SetValue(CellTemplateSelectorProperty, value); } } ////// The DependencyProperty representing the CellTemplateSelector property. /// public static readonly DependencyProperty CellTemplateSelectorProperty = DependencyProperty.Register( "CellTemplateSelector", typeof(DataTemplateSelector), typeof(DataGridTemplateColumn), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(DataGridColumn.NotifyPropertyChangeForRefreshContent))); ////// A template describing how to display data for a cell /// that is being edited in this column. /// public DataTemplate CellEditingTemplate { get { return (DataTemplate)GetValue(CellEditingTemplateProperty); } set { SetValue(CellEditingTemplateProperty, value); } } ////// The DependencyProperty representing the CellEditingTemplate /// public static readonly DependencyProperty CellEditingTemplateProperty = DependencyProperty.Register( "CellEditingTemplate", typeof(DataTemplate), typeof(DataGridTemplateColumn), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(DataGridColumn.NotifyPropertyChangeForRefreshContent))); ////// A template selector describing how to display data for a cell /// that is being edited in this column. /// public DataTemplateSelector CellEditingTemplateSelector { get { return (DataTemplateSelector)GetValue(CellEditingTemplateSelectorProperty); } set { SetValue(CellEditingTemplateSelectorProperty, value); } } ////// The DependencyProperty representing the CellEditingTemplateSelector /// public static readonly DependencyProperty CellEditingTemplateSelectorProperty = DependencyProperty.Register( "CellEditingTemplateSelector", typeof(DataTemplateSelector), typeof(DataGridTemplateColumn), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(DataGridColumn.NotifyPropertyChangeForRefreshContent))); ////// Returns either the specified CellTemplate or CellEditingTemplate. /// CellTemplate is returned if CellEditingTemplate is null. /// /// Whether the editing template is requested. private DataTemplate ChooseCellTemplate(bool isEditing) { DataTemplate template = null; if (isEditing) { template = CellEditingTemplate; } if (template == null) { template = CellTemplate; } return template; } ////// Returns either the specified CellTemplateSelector or CellEditingTemplateSelector. /// CellTemplateSelector is returned if CellEditingTemplateSelector is null. /// /// Whether the editing template selector is requested. private DataTemplateSelector ChooseCellTemplateSelector(bool isEditing) { DataTemplateSelector templateSelector = null; if (isEditing) { templateSelector = CellEditingTemplateSelector; } if (templateSelector == null) { templateSelector = CellTemplateSelector; } return templateSelector; } #endregion #region Visual Tree Generation ////// Creates the visual tree that will become the content of a cell. /// /// Whether the editing version is being requested. /// The data item for the cell. /// The cell container that will receive the tree. private FrameworkElement LoadTemplateContent(bool isEditing, object dataItem, DataGridCell cell) { DataTemplate template = ChooseCellTemplate(isEditing); DataTemplateSelector templateSelector = ChooseCellTemplateSelector(isEditing); if (template != null || templateSelector != null) { ContentPresenter contentPresenter = new ContentPresenter(); BindingOperations.SetBinding(contentPresenter, ContentPresenter.ContentProperty, new Binding()); contentPresenter.ContentTemplate = template; contentPresenter.ContentTemplateSelector = templateSelector; return contentPresenter; } return null; } ////// Creates the visual tree that will become the content of a cell. /// protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem) { return LoadTemplateContent(/* isEditing = */ false, dataItem, cell); } ////// Creates the visual tree that will become the content of a cell. /// protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem) { return LoadTemplateContent(/* isEditing = */ true, dataItem, cell); } #endregion #region Property Changed Handler ////// Override which handles property /// change for template properties /// /// /// protected internal override void RefreshCellContent(FrameworkElement element, string propertyName) { DataGridCell cell = element as DataGridCell; if (cell != null) { bool isCellEditing = cell.IsEditing; if ((!isCellEditing && ((string.Compare(propertyName, "CellTemplate", StringComparison.Ordinal) == 0) || (string.Compare(propertyName, "CellTemplateSelector", StringComparison.Ordinal) == 0))) || (isCellEditing && ((string.Compare(propertyName, "CellEditingTemplate", StringComparison.Ordinal) == 0) || (string.Compare(propertyName, "CellEditingTemplateSelector", StringComparison.Ordinal) == 0)))) { cell.BuildVisualTree(); return; } } base.RefreshCellContent(element, propertyName); } #endregion } } // 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. // //--------------------------------------------------------------------------- using System; using System.ComponentModel; using System.Diagnostics; using System.Windows; using System.Windows.Data; namespace System.Windows.Controls { ////// A column definition that allows a developer to specify specific /// editing and non-editing templates. /// public class DataGridTemplateColumn : DataGridColumn { #region Constructors static DataGridTemplateColumn() { CanUserSortProperty.OverrideMetadata( typeof(DataGridTemplateColumn), new FrameworkPropertyMetadata(null, new CoerceValueCallback(OnCoerceTemplateColumnCanUserSort))); SortMemberPathProperty.OverrideMetadata( typeof(DataGridTemplateColumn), new FrameworkPropertyMetadata(new PropertyChangedCallback(OnTemplateColumnSortMemberPathChanged))); } #endregion #region Auto Sort private static void OnTemplateColumnSortMemberPathChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { DataGridTemplateColumn column = (DataGridTemplateColumn)d; column.CoerceValue(CanUserSortProperty); } private static object OnCoerceTemplateColumnCanUserSort(DependencyObject d, object baseValue) { DataGridTemplateColumn templateColumn = (DataGridTemplateColumn)d; if (string.IsNullOrEmpty(templateColumn.SortMemberPath)) { return false; } return DataGridColumn.OnCoerceCanUserSort(d, baseValue); } #endregion #region Templates ////// A template describing how to display data for a cell in this column. /// public DataTemplate CellTemplate { get { return (DataTemplate)GetValue(CellTemplateProperty); } set { SetValue(CellTemplateProperty, value); } } ////// The DependencyProperty representing the CellTemplate property. /// public static readonly DependencyProperty CellTemplateProperty = DependencyProperty.Register( "CellTemplate", typeof(DataTemplate), typeof(DataGridTemplateColumn), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(DataGridColumn.NotifyPropertyChangeForRefreshContent))); ////// A template selector describing how to display data for a cell in this column. /// public DataTemplateSelector CellTemplateSelector { get { return (DataTemplateSelector)GetValue(CellTemplateSelectorProperty); } set { SetValue(CellTemplateSelectorProperty, value); } } ////// The DependencyProperty representing the CellTemplateSelector property. /// public static readonly DependencyProperty CellTemplateSelectorProperty = DependencyProperty.Register( "CellTemplateSelector", typeof(DataTemplateSelector), typeof(DataGridTemplateColumn), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(DataGridColumn.NotifyPropertyChangeForRefreshContent))); ////// A template describing how to display data for a cell /// that is being edited in this column. /// public DataTemplate CellEditingTemplate { get { return (DataTemplate)GetValue(CellEditingTemplateProperty); } set { SetValue(CellEditingTemplateProperty, value); } } ////// The DependencyProperty representing the CellEditingTemplate /// public static readonly DependencyProperty CellEditingTemplateProperty = DependencyProperty.Register( "CellEditingTemplate", typeof(DataTemplate), typeof(DataGridTemplateColumn), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(DataGridColumn.NotifyPropertyChangeForRefreshContent))); ////// A template selector describing how to display data for a cell /// that is being edited in this column. /// public DataTemplateSelector CellEditingTemplateSelector { get { return (DataTemplateSelector)GetValue(CellEditingTemplateSelectorProperty); } set { SetValue(CellEditingTemplateSelectorProperty, value); } } ////// The DependencyProperty representing the CellEditingTemplateSelector /// public static readonly DependencyProperty CellEditingTemplateSelectorProperty = DependencyProperty.Register( "CellEditingTemplateSelector", typeof(DataTemplateSelector), typeof(DataGridTemplateColumn), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(DataGridColumn.NotifyPropertyChangeForRefreshContent))); ////// Returns either the specified CellTemplate or CellEditingTemplate. /// CellTemplate is returned if CellEditingTemplate is null. /// /// Whether the editing template is requested. private DataTemplate ChooseCellTemplate(bool isEditing) { DataTemplate template = null; if (isEditing) { template = CellEditingTemplate; } if (template == null) { template = CellTemplate; } return template; } ////// Returns either the specified CellTemplateSelector or CellEditingTemplateSelector. /// CellTemplateSelector is returned if CellEditingTemplateSelector is null. /// /// Whether the editing template selector is requested. private DataTemplateSelector ChooseCellTemplateSelector(bool isEditing) { DataTemplateSelector templateSelector = null; if (isEditing) { templateSelector = CellEditingTemplateSelector; } if (templateSelector == null) { templateSelector = CellTemplateSelector; } return templateSelector; } #endregion #region Visual Tree Generation ////// Creates the visual tree that will become the content of a cell. /// /// Whether the editing version is being requested. /// The data item for the cell. /// The cell container that will receive the tree. private FrameworkElement LoadTemplateContent(bool isEditing, object dataItem, DataGridCell cell) { DataTemplate template = ChooseCellTemplate(isEditing); DataTemplateSelector templateSelector = ChooseCellTemplateSelector(isEditing); if (template != null || templateSelector != null) { ContentPresenter contentPresenter = new ContentPresenter(); BindingOperations.SetBinding(contentPresenter, ContentPresenter.ContentProperty, new Binding()); contentPresenter.ContentTemplate = template; contentPresenter.ContentTemplateSelector = templateSelector; return contentPresenter; } return null; } ////// Creates the visual tree that will become the content of a cell. /// protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem) { return LoadTemplateContent(/* isEditing = */ false, dataItem, cell); } ////// Creates the visual tree that will become the content of a cell. /// protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem) { return LoadTemplateContent(/* isEditing = */ true, dataItem, cell); } #endregion #region Property Changed Handler ////// Override which handles property /// change for template properties /// /// /// protected internal override void RefreshCellContent(FrameworkElement element, string propertyName) { DataGridCell cell = element as DataGridCell; if (cell != null) { bool isCellEditing = cell.IsEditing; if ((!isCellEditing && ((string.Compare(propertyName, "CellTemplate", StringComparison.Ordinal) == 0) || (string.Compare(propertyName, "CellTemplateSelector", StringComparison.Ordinal) == 0))) || (isCellEditing && ((string.Compare(propertyName, "CellEditingTemplate", StringComparison.Ordinal) == 0) || (string.Compare(propertyName, "CellEditingTemplateSelector", StringComparison.Ordinal) == 0)))) { cell.BuildVisualTree(); return; } } base.RefreshCellContent(element, propertyName); } #endregion } } // 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
- RoleService.cs
- PropertyItemInternal.cs
- _SecureChannel.cs
- ObjectItemCachedAssemblyLoader.cs
- X509ChainPolicy.cs
- DataSourceCacheDurationConverter.cs
- RuntimeComponentFilter.cs
- UnrecognizedAssertionsBindingElement.cs
- ExtensibleClassFactory.cs
- WebPartRestoreVerb.cs
- RemotingSurrogateSelector.cs
- Debug.cs
- QueryCreatedEventArgs.cs
- DoubleAnimationUsingKeyFrames.cs
- FileAuthorizationModule.cs
- MetadataArtifactLoader.cs
- DoubleCollection.cs
- StringUtil.cs
- SamlSubjectStatement.cs
- XsltLoader.cs
- ContextDataSourceContextData.cs
- CharKeyFrameCollection.cs
- MessageSecurityOverHttpElement.cs
- ExecutionContext.cs
- LambdaCompiler.Expressions.cs
- DataListItemCollection.cs
- RegexCompiler.cs
- ClearTypeHintValidation.cs
- ToolStripKeyboardHandlingService.cs
- ClientCredentials.cs
- VariableExpressionConverter.cs
- printdlgexmarshaler.cs
- CodeAssignStatement.cs
- WindowsStreamSecurityElement.cs
- VirtualPathUtility.cs
- XmlEntityReference.cs
- Debug.cs
- ErrorFormatter.cs
- SecureConversationServiceCredential.cs
- altserialization.cs
- NotifyIcon.cs
- StrokeCollectionConverter.cs
- SimpleRecyclingCache.cs
- StringHandle.cs
- WebPartDisplayModeCancelEventArgs.cs
- CopyAction.cs
- WSTrust.cs
- DataGridRow.cs
- SqlDataSourceRefreshSchemaForm.cs
- PackUriHelper.cs
- AsyncInvokeOperation.cs
- DataGridViewCell.cs
- DataObjectEventArgs.cs
- TextDecorationCollection.cs
- X509PeerCertificateElement.cs
- ContainerAction.cs
- VerticalAlignConverter.cs
- LocalizabilityAttribute.cs
- WasHostedComPlusFactory.cs
- WindowsTitleBar.cs
- IndexingContentUnit.cs
- ToolConsole.cs
- Options.cs
- BuildProvidersCompiler.cs
- TextServicesCompartmentEventSink.cs
- Hash.cs
- GenerateDerivedKeyRequest.cs
- DataGridViewBand.cs
- EnumBuilder.cs
- FrameworkReadOnlyPropertyMetadata.cs
- DeadLetterQueue.cs
- AlternateViewCollection.cs
- ExtenderHelpers.cs
- DBCSCodePageEncoding.cs
- SubtreeProcessor.cs
- Attachment.cs
- Int32Animation.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- ToolTipAutomationPeer.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- infer.cs
- RegularExpressionValidator.cs
- SmtpFailedRecipientException.cs
- OleDbMetaDataFactory.cs
- HttpResponse.cs
- RadioButton.cs
- SqlDataSourceFilteringEventArgs.cs
- MessageSmuggler.cs
- SafeBitVector32.cs
- CatalogUtil.cs
- StreamReader.cs
- RectAnimationClockResource.cs
- DropSource.cs
- dsa.cs
- WebSysDefaultValueAttribute.cs
- BooleanConverter.cs
- tooltip.cs
- RuleConditionDialog.Designer.cs
- EncoderBestFitFallback.cs
- StreamingContext.cs