2016-09-10 2 views
0

일부 열 너비가 "자동"으로 설정된 DataGrid가 있습니다. 이제 FontSize를 변경하려고합니다. FontSize를 더 크게 만들면 열이 더 넓어 지지만 FontSize를 더 작게 만들면 FontSize에 따라 열 너비가 줄어들지 않습니다.FontSize 변경 후 WPF DataGrid 자동 변경

<DataGridTextColumn .... 
        Width="auto" 
        .... 

"자동"및 "*"값을 다시 계산하도록 DataGrid를 강제 설정하는 방법이 있습니까?

+0

가 어디 폰트 크기의 코드를 변경? 데이터 그리드의 전체 코드를 제공하십시오. –

+0

방금 ​​설정했습니다 : dataGrid.FontSize = something; –

답변

1

열의 폭의 설정하라는 작동 :

foreach (var dataGridColumn in dg.Columns) 
      { 
       dataGridColumn.Width = new DataGridLength(20); 
       dataGridColumn.Width = new DataGridLength(); 
      } 
+0

일반적으로 작동하지만 XAML에서 열에 대해 설정된 원래 값을 읽고 복원하는 방법이 있습니까? 내 열이 모두 * auto *가 아니며 XAML 및 C# 두 번으로 열 너비를 설정하는 아이디어가 마음에 들지 않습니다. –

+0

예. 당신은 리소스로 그리드 너비를 저장하고 코드로 복원해야한다 : this.TryFindResource ("myGridWidth"). 불명확 한 경우 - 새로운 질문을 게시하고 나에게 hyperlync를 보내주십시오. –

1

가장 쉬운 방법은 ItemsSource에서 null으로 설정 한 다음 다시 할당하십시오. 예 :

// This method works for AutoGenerateColumns = true 
    Dgrd.FontSize = 8; 
    Dgrd.ItemsSource = null; 
    Dgrd.ItemsSource = ...; 

일반적인 방법은 열의 이전 너비 값을 저장 한 다음 복원하는 것입니다. 예 :

Dictionary<DataGridColumn, double> columns = new Dictionary<DataGridColumn, double>(); 

    private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     Dgrd.FontSize = 20; 

     columns.Clear(); 
     foreach (DataGridColumn col in Dgrd.Columns) 
     { 
      columns.Add(col, col.ActualWidth); 
     } 
    } 

    private void Button_Click_2(object sender, RoutedEventArgs e) 
    { 
     Dgrd.FontSize = 8;    

     foreach (DataGridColumn col in Dgrd.Columns) 
     { 
      col.Width = columns[col]; 
     } 
    } 
+0

시도한/var dgdSouce = dataGridDocument.ItemsSource;/dataGridDocument.ItemsSource = null;/dataGridDocument.ItemsSource = dgdSouce;/그러나 작동하지 않습니다. –

+0

@be_mi 업데이트 된 코드를 참조하십시오. – AnjumSKhan

관련 문제