1. 程式人生 > >DataGrid實現拖動任意列的列頭改變列寬度時,讓其他列的寬度和他一樣寬

DataGrid實現拖動任意列的列頭改變列寬度時,讓其他列的寬度和他一樣寬

首先建立列頭的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,這樣就實現了拖動任意列頭同步其他列的寬度.簡單吧!