首先创建列头的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,这样就实现了拖动任意列头同步其他列的宽度.简单吧!