【问题标题】:How to get the actual font size used by a chart axis label如何获取图表轴标签使用的实际字体大小
【发布时间】:2019-10-22 13:02:11
【问题描述】:

我正在使用图表(DataVisualization.Charting.Chart)并让图表决定轴标签的字体大小(每个轴的IsLabelAutoFit = True)。图表绘制完成后,我想知道实际使用的字体大小。微软文档说LabelStyle.FontGetSet。但是,Get 始终返回默认字体大小(8 pts)而不是实际使用的字体大小。如何获取图表使用的真实字体大小?

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

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

【问题讨论】:

    标签: vb.net charts


    【解决方案1】:

    我四处寻找,发现图表使用的实际字体大小位于轴调用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-02
      • 2016-11-11
      • 2019-11-18
      • 1970-01-01
      • 2017-09-25
      • 2021-03-11
      • 2020-06-23
      • 2022-09-28
      相关资源
      最近更新 更多