我正在使用图表(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
正确地给了我使用的实际标题字体大小。但是,标题字体是固定的,绘制图表时不会动态更改。如何获取绘制图表的轴标签字体大小?
答案 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