deathrace
deathrace

Reputation: 1073

Font size not applied to datagrid columnheader

I have a wpf datagrid in which I am adding all the columns and style through C#.

I have applied ColumnHeaderStyle as follows:

  1. written setter as :

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

  2. Style as:

            var headerStyle = new Style();
            headerStyle.Setters.Add(fontSetter);
            headerStyle.Setters.Add(fontSizeSetter);
            headerStyle.Setters.Add(fontStyleSetter);
            headerStyle.Setters.Add(fontWeightSetter);
    
  3. Applied it to my Datagrid's ColumnHeaderStyle as:

view.DataGrid.ColumnHeaderStyle = headerStyle;

Current problem: now, when I set FontFamily & FontStyle it gets applied. but column Header textsize remains same. It does not get updated. enter image description here

Entire Method:

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);
        }

Upvotes: 2

Views: 7270

Answers (3)

Neeraj
Neeraj

Reputation: 4489

Use this code to resize font of Column Header in Datagrid:

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

Upvotes: 7

deathrace
deathrace

Reputation: 1073

I wrote following data template in my datagrid resources. It works.

<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>

Upvotes: 0

RonakThakkar
RonakThakkar

Reputation: 903

Can you try below code.

        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;

Upvotes: 0

Related Questions