| File: System\Windows\Documents\TableColumn.cs | Web Access |
| Project: src\wpf\src\Microsoft.DotNet.Wpf\src\PresentationFramework\PresentationFramework.csproj (PresentationFramework) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // // Description: Table column object implementation. // using System.Windows.Controls; using System.Windows.Media; using MS.Internal.PtsHost.UnsafeNativeMethods; // PTS restrictions using MS.Internal.Documents; namespace System.Windows.Documents { /// <summary> /// Table column. /// </summary> public class TableColumn : FrameworkContentElement, IIndexedChild<Table> { //------------------------------------------------------ // // Constructors // //------------------------------------------------------ #region Constructors /// <summary> /// Creates an instance of a Column /// </summary> public TableColumn() { _parentIndex = -1; } #endregion Constructors //------------------------------------------------------ // // Public Methods // //------------------------------------------------------ #region Public Methods #endregion Public Methods //------------------------------------------------------ // // Public Properties // //------------------------------------------------------ #region Public Properties /// <summary> /// Width property. /// </summary> public GridLength Width { get { return (GridLength) GetValue(WidthProperty); } set { SetValue(WidthProperty, value); } } /// <summary> /// Background property. /// </summary> public Brush Background { get { return (Brush) GetValue(BackgroundProperty); } set { SetValue(BackgroundProperty, value); } } #endregion Public Properties //------------------------------------------------------ // // Protected Methods // //------------------------------------------------------ #region Protected Methods #endregion Protected Methods //------------------------------------------------------ // // Internal Methods // //------------------------------------------------------ #region Internal Methods #region IIndexedChild implementation /// <summary> /// Callback used to notify about entering model tree. /// </summary> void IIndexedChild<Table>.OnEnterParentTree() { this.OnEnterParentTree(); } /// <summary> /// Callback used to notify about exitting model tree. /// </summary> void IIndexedChild<Table>.OnExitParentTree() { this.OnExitParentTree(); } void IIndexedChild<Table>.OnAfterExitParentTree(Table parent) { } int IIndexedChild<Table>.Index { get { return this.Index; } set { this.Index = value; } } #endregion IIndexedChild implementation /// <summary> /// Callback used to notify the Cell about entering model tree. /// </summary> internal void OnEnterParentTree() { Table.InvalidateColumns(); } /// <summary> /// Callback used to notify the Cell about exitting model tree. /// </summary> internal void OnExitParentTree() { Table.InvalidateColumns(); } #endregion Internal Methods //------------------------------------------------------ // // Internal Properties // //------------------------------------------------------ #region Internal Properties /// <summary> /// Table owner accessor /// </summary> internal Table Table { get { return Parent as Table; } } /// <summary> /// Column's index in the parents collection. /// </summary> internal int Index { get { return (_parentIndex); } set { Debug.Assert (value >= -1 && _parentIndex != value); _parentIndex = value; } } /// <summary> /// DefaultWidth /// </summary> internal static GridLength DefaultWidth { get { return (new GridLength(0, GridUnitType.Auto)); } } #endregion Internal Properties //------------------------------------------------------ // // Private Methods // //------------------------------------------------------ #region Private Methods /// <summary> /// <see cref="DependencyProperty.ValidateValueCallback"/> /// </summary> private static bool IsValidWidth(object value) { GridLength gridLength = (GridLength) value; if ((gridLength.GridUnitType == GridUnitType.Pixel || gridLength.GridUnitType == GridUnitType.Star) && (gridLength.Value < 0.0)) { return false; } double maxPixel = Math.Min(1000000, PTS.MaxPageSize); if (gridLength.GridUnitType == GridUnitType.Pixel && (gridLength.Value > maxPixel)) { return false; } return true; } #endregion Private Methods //------------------------------------------------------ // // Private Fields // //------------------------------------------------------ #region Private Fields private int _parentIndex; // column's index in parent's children collection #endregion Private Fields //------------------------------------------------------ // // Properties // //------------------------------------------------------ #region Properties /// <summary> /// Width property. /// </summary> public static readonly DependencyProperty WidthProperty = DependencyProperty.Register( "Width", typeof(GridLength), typeof(TableColumn), new FrameworkPropertyMetadata( new GridLength(0, GridUnitType.Auto), FrameworkPropertyMetadataOptions.AffectsMeasure, new PropertyChangedCallback(OnWidthChanged)), new ValidateValueCallback(IsValidWidth)); /// <summary> /// DependencyProperty for <see cref="Background" /> property. /// </summary> public static readonly DependencyProperty BackgroundProperty = Panel.BackgroundProperty.AddOwner( typeof(TableColumn), new FrameworkPropertyMetadata( null, FrameworkPropertyMetadataOptions.AffectsRender, new PropertyChangedCallback(OnBackgroundChanged))); #endregion Properties //------------------------------------------------------ // // Static Initialization // //------------------------------------------------------ #region Static Initialization /// <summary> /// Called when the value of the WidthProperty changes /// </summary> private static void OnWidthChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { Table table = ((TableColumn) d).Table; table?.InvalidateColumns(); } /// <summary> /// Called when the value of the BackgroundProperty changes /// </summary> private static void OnBackgroundChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { Table table = ((TableColumn) d).Table; table?.InvalidateColumns(); } #endregion Static Initialization } }