ほとんどのテーブルには、行番号を表示するための要件があります。
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の追加属性のテクノロジを使用します。