WPFの追加プロパティを利用して、DataGridは行番号を表示します

ほとんどのテーブルには、行番号を表示するための要件が​​あります。

WPFのDataGridは行番号を表示します。これは通常、次のように表示されます。

 

 対応するイベント処理メソッドをバックグラウンドコードで記述します。

 

 

 

実行効果は次のとおりです。

 

 ただし、これには、行番号を表示する必要があるプロジェクト内のすべてのDataGridのコードを繰り返す必要があります。

非常に優雅ではありません。

次に、属性を追加して上記のコードをカプセル化する方法を紹介します。

その後、適用するたびに、DataGridのプロパティを設定するだけで済みます。

 

 

#region DisplayRowNumber
        public static bool GetDisplayRowNumber(DependencyObject obj)
        {
            return(bool)obj.GetValue(DisplayRowNumberProperty);
        }

        [AttachedPropertyBrowsableForType(typeof(DataGrid))]
        public static void SetDisplayRowNumber(DependencyObject obj、bool value)
        {
            obj.SetValue(DisplayRowNumberProperty、value);
        }

        /// <概要>
        ///行番号を表示するかどうかを設定
        /// </ summary>
        public static readonly DependencyProperty DisplayRowNumberProperty =
            DependencyProperty.RegisterAttached( "DisplayRowNumber"、 
                                                typeof(bool)、 
                                                typeof(DataGridHelper)、 
                                                new PropertyMetadata(false、OnDisplayRowNumberChanged));

        プライベート静的void OnDisplayRowNumberChanged(DependencyObject d、DependencyPropertyChangedEventArgs e)
        {
            DataGrid grid = d as DataGrid;
            if(grid == null)
            {
                戻る;
            }

            if((bool)e.NewValue)
            {
                grid.LoadingRow + = OnGridLoadingRow;
                grid.UnloadingRow + = OnGridUnloadingRow;
            }
            そうしないと
            {
                grid.LoadingRow-= OnGridLoadingRow;
                grid.UnloadingRow-= OnGridUnloadingRow;
            }
        }

        プライベート静的void RefreshDataGridRowNumber(オブジェクト送信者)
        {
            DataGridグリッド= DataGridとしての送信者;
            if(grid == null)
            {
                戻る;
            }

            foreach(grid.Itemsのvar item)
            {
                var row =(DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(item);
                if(行== null)
                {
                    戻る;
                }
                row.Header = row.GetIndex()+ 1;
            }
        }

        プライベート静的void OnGridUnloadingRow(オブジェクト送信者、DataGridRowEventArgs e)
        {
            RefreshDataGridRowNumber(sender);
        }

        プライベート静的void OnGridLoadingRow(オブジェクト送信者、DataGridRowEventArgs e)
        {
            RefreshDataGridRowNumber(sender);
        }

        #endregion

  

要約すると、主にWPFの追加属性のテクノロジを使用します。

 

おすすめ

転載: www.cnblogs.com/luqingfei/p/12697212.html