2013-05-06 88 views
1

我有一个wpf datagrid,我在其中通过C#添加所有列和样式。字体大小不适用于datagrid columnheader

我已经申请ColumnHeaderStyle如下:

  1. 写setter方法为:

    var fontSizeSetter = new Setter {Property = Control.FontSizeProperty, Value = Convert.ToDouble(font.Size)};

  2. 样式为:

     var headerStyle = new Style(); 
         headerStyle.Setters.Add(fontSetter); 
         headerStyle.Setters.Add(fontSizeSetter); 
         headerStyle.Setters.Add(fontStyleSetter); 
         headerStyle.Setters.Add(fontWeightSetter); 
    
  3. 它应用到我的Datagrid's ColumnHeaderSt YLE为:

view.DataGrid.ColumnHeaderStyle = headerStyle;

目前存在的问题:现在 ,当我设置的FontFamily & FontStyle它得到应用。但列标题textsize保持不变。它不会更新。 enter image description here

整个方法:

private static void ConfigureFontsForDataGrid(Views.StatusMonitor view, StatusMonitorAgencyFontType font) 
     { 
      var fontfamily = new FontFamily(font.Font); 
      var fontSetter = new Setter { Property = Control.FontFamilyProperty, Value = fontfamily }; 
      var fontSizeSetter = new Setter { Property = Control.FontSizeProperty, Value = Convert.ToDouble(font.Size) }; 
      var fontStyleSetter = new Setter { Property = Control.FontStyleProperty }; 
      var fontWeightSetter = new Setter { Property = Control.FontWeightProperty }; 

      // Defaults 
      fontWeightSetter.Value = FontWeights.Regular; 
      fontStyleSetter.Value = FontStyles.Normal; 

      switch (font.Style) 
      { 
       case "Regular": 
        fontWeightSetter.Value = FontWeights.Regular; 
        fontStyleSetter.Value = FontStyles.Normal; 
        break; 

       case "Bold Italic": 
        fontWeightSetter.Value = FontWeights.Bold; 
        fontStyleSetter.Value = FontStyles.Italic; 
        break; 
      } 

      //Configuring data grid cell font 
      view.DataGrid.CellStyle.Setters.Add(fontSetter); 
      view.DataGrid.CellStyle.Setters.Add(fontSizeSetter); 
      view.DataGrid.CellStyle.Setters.Add(fontStyleSetter); 
      view.DataGrid.CellStyle.Setters.Add(fontWeightSetter); 

      //Configuring data grid column header font 
      view.DataGrid.ColumnHeaderStyle.Setters.Add(fontSetter); 
      view.DataGrid.ColumnHeaderStyle.Setters.Add(fontSizeSetter); 
      view.DataGrid.ColumnHeaderStyle.Setters.Add(fontStyleSetter); 
      view.DataGrid.ColumnHeaderStyle.Setters.Add(fontWeightSetter); 
     } 
+0

主要的问题是我不能够设置字体大小/身高在这里头内容.. – deathrace 2013-05-06 09:29:13

+0

我还没有得到任何解决方案请建议 – deathrace 2013-05-16 08:20:25

回答

0

我在我的datagrid资源中写了如下的数据模板。有用。

<DataTemplate DataType="{x:Type System:String}"> 
       <TextBlock Text="{Binding}"> 
        <TextBlock.Resources> 
         <Style TargetType="{x:Type TextBlock}"> 
          <Setter Property="FontFamily" Value="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumnHeader}, Path=FontFamily}" /> 
          <Setter Property="FontSize" Value="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumnHeader}, Path=FontSize}" /> 
          <Setter Property="FontStyle" Value="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumnHeader}, Path=FontStyle}"/> 
          <Setter Property="FontWeight" Value="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumnHeader}, Path=FontWeight}"/> 
         </Style> 
        </TextBlock.Resources> 
       </TextBlock> 
      </DataTemplate> 
7

使用此代码来调整列标题的字体DataGrid中:

<DataGrid.ColumnHeaderStyle> 
<Style TargetType="DataGridColumnHeader"> 
    <Setter Property="FontSize" Value="10"/> 
</Style> 

+0

我需要做的是只在C#。我无法使用XAML,因为我为每个数据网格动态获取不同的字体。 – deathrace 2013-05-06 06:12:44

0

你可以试试下面的代码。

 var headerStyle = new Style(); 
     Setter fontSetter = new Setter { Property = Control.FontFamilyProperty, Value = new FontFamily("Calibri") }; 
     headerStyle.Setters.Add(fontSetter); 

     Setter fontSizeSetter = new Setter { Property = Control.FontSizeProperty, Value = Convert.ToDouble(20) }; 
     headerStyle.Setters.Add(fontSizeSetter); 

     Setter fontStyleSetter = new Setter { Property = Control.FontStyleProperty, Value = FontStyles.Italic }; 
     headerStyle.Setters.Add(fontStyleSetter); 

     Setter fontWeightSetter = new Setter { Property = Control.FontWeightProperty, Value = FontWeights.Bold }; 
     headerStyle.Setters.Add(fontWeightSetter); 

     myGrid.ColumnHeaderStyle = headerStyle; 
+0

也试过这个。还是行不通。 :( – deathrace 2013-05-06 07:26:51

+0

主要问题是我无法将字体大小/高度设置为页眉的内容 – deathrace 2013-05-06 09:45:44