如何以编程方式应用MapXtreme主题

时间:2012-02-09 00:22:44

标签: gis mapxtreme

我使用MapXtreme 7.0维护桌面应用程序 很难找到很多文档或有用的例子(我确实有 安装光盘上的pdf,样本等)

目前我正在尝试以编程方式应用IndividualValueTheme 到FeatureLayer。我可以应用标准默认主题,我也可以 显示ModifyIndValueThemeDlg并让用户更改主题。 但是,我想要做的是将我自己的主题应用于图层而不是 用户干预。

以下代码尝试执行此操作但会生成Layer 使用默认的IndividualValueTheme显示(即不使用我的样式)

非常感谢任何帮助

void ApplyTheme(FeatureLayer lyr)
{
    if (lyr.Modifiers.Contains(HarvOpsTheme) || lyr.Modifiers.Contains(HarvOpsRangedTheme))
        return;
    HarvOpsTheme = new IndividualValueTheme(lyr, "iOperationType","HarvOpsTheme");
    lyr.Modifiers.Append(HarvOpsTheme);
    HarvOpsTheme.Bins[0].Style.ApplyStyle(GetHollowAreaStyle(Color.FromArgb(255, 255, 0)));
    HarvOpsTheme.Bins[1].Style.ApplyStyle(GetHollowAreaStyle(Color.FromArgb(0, 255, 0)));
    HarvOpsTheme.Bins[2].Style.ApplyStyle(GetHollowAreaStyle(Color.FromArgb(128, 128, 0)));
    HarvOpsTheme.Bins[3].Style.ApplyStyle(GetHollowAreaStyle(Color.FromArgb(192, 128, 0)));
    HarvOpsTheme.Bins[4].Style.ApplyStyle(GetHollowAreaStyle(Color.FromArgb(0, 128, 0)));
    HarvOpsTheme.Bins[5].Style.ApplyStyle(GetHollowAreaStyle(Color.FromArgb(0, 205, 128)));
    HarvOpsTheme.Bins[6].Style.ApplyStyle(GetHollowAreaStyle(Color.FromArgb(255, 0, 0)));

    HarvOpsTheme.Apply(HarvOpsTheme);
    HarvOpsTheme.RecomputeStyles();

    lyr.Invalidate();
}

AreaStyle GetHollowAreaStyle(Color color)
{
    return new AreaStyle
    {
        Interior = StockStyles.HollowFillStyle(),
        Border = new SimpleLineStyle(new LineWidth(1,LineWidthUnit.Pixel), 1, color)
    };
}

1 个答案:

答案 0 :(得分:0)

仅对于个人主题,重新计算样式会导致重新生成第一个主题结果。用户通过[Bins]更改样式后,您无需再次重新计算它们。

简而言之,只需删除线条,让魔法发生

HarvOpsTheme.RecomputeStyles();

最好的问候