Как программно применять MapXtreme Themes
Я поддерживаю приложение для настольных компьютеров, используя 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)
};
}
1 ответ
Только для индивидуальной темы, повторное вычисление стилей приводит к восстановлению первого результата создания тем. После того, как пользователь изменяет стили с помощью [Bins], вам не нужно повторно вычислять их снова.
Короче говоря, просто удалите строку и позвольте магии случиться
HarvOpsTheme.RecomputeStyles();
С уважением