0

MapXtreme 7.0 を使用してデスクトップ アプリケーションを管理していますが、多くのドキュメントや有用な例を見つけるのに苦労しています (インストール ディスクに含まれている PDF やサンプルなどはあります)。

現在、IndividualValueTheme を FeatureLayer にプログラムで適用しようとしています。標準のデフォルト テーマを適用できます。また、ModifyIndValueThemeDlg を表示して、ユーザーがテーマを変更できるようにすることもできます。ただし、私がやりたいことは、ユーザーの介入なしに独自のテーマをレイヤーに適用することです。

次のコードはこれを試みますが、レイヤーがデフォルトの 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)
    };
}
4

1 に答える 1

0

個々のテーマの場合のみ、スタイルを再計算すると、最初のテーマ結果が再生成されます。ユーザーが [Bins] でスタイルを変更した後、それらを再計算する必要はありません。

要するに、単純に行を削除して、魔法が起こるようにします

HarvOpsTheme.RecomputeStyles();

よろしくお願いします

于 2012-10-04T06:49:01.560 に答える