如何获取图表轴标签使用的实际字体大小

时间:2019-10-22 13:02:11

标签: vb.net charts

我正在使用图表(DataVisualization.Charting.Chart),让图表决定轴标签的字体大小(每个轴IsLabelAutoFit = True)。绘制图表后,我想知道使用的实际字体大小。 Microsoft文档说LabelStyle.Font既适用于Get,也适用于Set。但是,“获取”始终返回默认字体大小(8点),而不是使用的实际字体大小。如何获得图表使用的真实字体大小?

Dim OriginalXLabelFont As Font = thisChart.ChartAreas("ChartArea1").AxisX.LabelStyle.Font
Dim OriginalXTitleFont As Font = thisChart.ChartAreas("ChartArea1").AxisX.TitleFont

我希望OriginalXLabelFont是图表使用的实际字体大小,但始终只是默认大小。另一方面,OriginalXTitleFont正确地给了我使用的实际标题字体大小。但是,标题字体是固定的,绘制图表时不会动态更改。如何获取绘制图表的轴标签字体大小?

1 个答案:

答案 0 :(得分:3)

我四处寻找,发现该图使用的实际字体大小在名为autoLabelFont的轴的非公共字段中。要访问它,我必须使用反射。

    Dim OriginalXLabelFont As Font = GetPrivateFieldValue(thisChart.ChartAreas("ChartArea1").AxisX, "autoLabelFont")

...

Private Function GetPrivateFieldValue(ByVal thisObject As Object, ByVal propName As String) As Object

    If IsNothing(thisObject) Then Return Nothing

    Dim fi As System.Reflection.FieldInfo = thisObject.GetType().GetField(propName, Reflection.BindingFlags.IgnoreCase Or
                   Reflection.BindingFlags.Public Or Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)

    If IsNothing(fi) Then Return Nothing

    Return fi.GetValue(thisObject)

End Function