Vb.net 如何自定义基础设施超级图表的标签?

Vb.net 如何自定义基础设施超级图表的标签?,vb.net,infragistics,Vb.net,Infragistics,我正在尝试使用vb.net自定义线性超图表X轴的系列标签 我查看了一下,发现我可以使用以下代码: UltraChart.Axis.Y.Labels.SeriesLabels.FormatString = "<Item_Label>" UltraChart.Axis.Y.Labels.SeriesLabels.FormatString=“” 可以看到可用标签类型的说明。 然而,我没有得到我期望的结果。我得到“行1”,我只想得到“1” 我尝试了Infrastics论坛中的第一个回复中

我正在尝试使用vb.net自定义线性超图表X轴的系列标签

我查看了一下,发现我可以使用以下代码:

UltraChart.Axis.Y.Labels.SeriesLabels.FormatString = "<Item_Label>"
UltraChart.Axis.Y.Labels.SeriesLabels.FormatString=“”
可以看到可用标签类型的说明。 然而,我没有得到我期望的结果。我得到“行1”,我只想得到“1”

我尝试了Infrastics论坛中的第一个回复中使用的方法,包括使用带有自定义标签的哈希表。这里使用的代码如下(用C#):

Hashtable labelHash=newhashtable();
添加(“自定义”,新的MyLabelRenderer());
ultraChart1.LabelHash=LabelHash;
xAxis.Labels.ItemFormatString=“”;
公共类MyLabelRenderer:IRenderLabel
{
公共字符串ToString(哈希表上下文)
{
字符串标签=(字符串)上下文[“项标签”];
int行=(int)上下文[“数据行”];
int col=(int)上下文[“数据列”];
//在上下文中使用行、列、当前标签的文本或其他信息来获取轴标签。
//此处返回的字符串将替换当前标签。
退货标签;
}
}
这种方法也不起作用。 我正在使用Infrastics NetAdvantage 2011.1


任何人都知道如何定制这些标签以获得“Row#”之后的数字吗?

有不同的方法来解决这个问题。一种可能的解决方案是,如果您使用的是FillSceneGraph事件。通过这种方式,您可以获取文本原语并对其进行修改。例如:

 private void ultraChart1_FillSceneGraph(object sender, Infragistics.UltraChart.Shared.Events.FillSceneGraphEventArgs e)
    {
        foreach (Primitive pr in e.SceneGraph)
        {
            if (pr is Text  &&((Text)pr).labelStyle.Orientation == TextOrientation.VerticalLeftFacing )
            {
                pr.PE.Fill = Color.Red;
                ((Text)pr).SetTextString("My custom labels");
            }
        }
    }

嗯。我将尝试更深入地解释FormatString属性。 使用此属性时,可以确定要显示的信息(例如:项目值、数据值或系列值)。当然,也有使用自定义FormatString的选项。 例如:

axisX2.Labels.ItemFormat=AxisItemLabelFormat.Custom; axisX2.Labels.ItemFormatString=“”

在本例中,我们的标签表示X轴上的日期,因此如果使用这两个属性,则可以确定日期格式(例如dd/MM/yyyy或MM/ddd/yy)。在您的场景中,X轴上有字符串值。如果您无法在较低级别修改这些字符串值(例如,在数据库中,通过TableAdapters SQL查询、DataSet,即在将数据源设置为我们的UltraChart之前),则可以使用FillsceGraph事件并修改文本原语。如果您需要样本或其他帮助,请随时在我们的网站上创建一个新的论坛主题-

我很乐意帮助您。

谢谢您的回答,但不幸的是我根本不用FillsceGraph。我一直在寻找的解决此问题的方法与此类似(它不必只有一行):
UltraChart.Axis.Y.Labels.SeriesLabels.FormatString=“”
,但我希望能够设置标签的文本,而不是格式化(类似于更改文本框文本时的操作)。如果你知道怎么做,请告诉我。@alhalama,是的,我试过Georgi的建议。当我尝试运行以下代码时,我遇到一个异常(
InvalidCastException:无法将类型为“Infragistics.UltraChart.Core.Primitives.GraphicsContext”的对象强制转换为类型为“Infragistics.UltraChart.Core.Primitives.Text”。
)对于e.SceneGraph中的每个pr1,如果(pr1是文本和DirectCast(pr1,Text).labelStyle.Orientation=Infragistics.UltraChart.Shared.Styles.TextOrientation.VerticalLeftFacing),然后是DirectCast(pr1,Text).SetTextString(i.ToString)在VB中,如果Next i=1,则结束并计算两侧,无论第一个条件是真还是假,而在C#&中,仅当第一个条件为真时,才计算右侧。将And替换为AndAlso,您将具有与C#相同的行为,这将解决您的InvalidCastException。例如:If(pr1是文本,AndAlso DirectCast(pr1,Text).labelStyle.Orientation=Infragistics.UltraChart.Shared.Styles.TextOrientation.VerticalLeftFacing)@alhalama,我在If条件下再次尝试使用AndAlso,不再出现异常。但是,我仍然没有得到我想要的结果(X轴标签仍然显示行#1而不是1)。能否提供当前使用的更新代码?
 private void ultraChart1_FillSceneGraph(object sender, Infragistics.UltraChart.Shared.Events.FillSceneGraphEventArgs e)
    {
        foreach (Primitive pr in e.SceneGraph)
        {
            if (pr is Text  &&((Text)pr).labelStyle.Orientation == TextOrientation.VerticalLeftFacing )
            {
                pr.PE.Fill = Color.Red;
                ((Text)pr).SetTextString("My custom labels");
            }
        }
    }