DataGrid實現拖動任意列的列頭改變列寬度時,讓其他列的寬度和他一樣寬
阿新 • • 發佈:2019-01-24
首先建立列頭的ColumnHeaderStyle:
<DataGrid.ColumnHeaderStyle> <Style TargetType="{x:Type DataGridColumnHeader}"> <Setter Property="HorizontalContentAlignment" Value="Center"/> <EventSetter Event="SizeChanged" Handler="ColumnHeader_SizeChanged"/> </Style> </DataGrid.ColumnHeaderStyle>
主要是那個SizeChanged事件一定要新增.
在後臺寫cs程式碼:
double width = 0; private void ColumnHeader_SizeChanged(object sender, SizeChangedEventArgs e) { if (e.Source == null) return; DataGridColumnHeader header = e.Source as DataGridColumnHeader; DataGridColumn column = header.Column; if (column != null) width = column.Width.Value; }
定義的width是在拖動某一列的列頭時記錄改變後的寬度.
然後在DataGrid的MouseLeftButtonUp事件或者PreviewMouseLeftButtonUp事件裡將改變後的寬度賦值給所有列:
private void data_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { for (int i = 0; i < data.Columns.Count; i++) data.Columns[i].Width = width; }
OK,這樣就實現了拖動任意列頭同步其他列的寬度.簡單吧!