wpf 字体大小不适用于数据网格列标题

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16392436/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 08:44:00  来源:igfitidea点击:

Font size not applied to datagrid columnheader

c#wpf

提问by deathrace

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

我有一个 wpf 数据网格,我在其中通过 C# 添加了所有列和样式。

I have applied ColumnHeaderStyle as follows:

我已应用 ColumnHeaderStyle 如下:

  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'sColumnHeaderStyle as:

  1. 写二传手为:

    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'sColumnHeaderStyle 作为:

view.DataGrid.ColumnHeaderStyle = headerStyle;

view.DataGrid.ColumnHeaderStyle = headerStyle;

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

当前问题:现在,当我设置FontFamilyFontStyle 时,它会被应用。但列标题文本大小保持不变。它不会更新。 在此处输入图片说明

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

采纳答案by deathrace

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>

回答by Neeraj Dubey

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

使用此代码调整 Datagrid 中列标题的字体大小:

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

回答by RonakThakkar

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;