Это действительно странная находка!
Сначала я подумал, что, возможно, Names
будет автоматически сгенерирован, скажем StripLine1
, StripLine2
и т. Д.
Но все они получают StripLine
как их Name
.
Так что для вашей цели их идентификации будет бесполезно.
Однако существует свойство Tag
, которое приходит на помощь;например, легко установить уникальную строку ..:
StripLine sl = new StripLine()
{ Text = "LW" , StripWidth = 2, ForeColor = Color.Teal, Tag = "Low-Water"};
Чтобы сделать ее уникальной для оси, AxisY
может использовать это:
StripLine sl = new StripLine()
{ Text = "LW" , StripWidth = 2, ForeColor = Color.Teal,
Tag = "Low-Water" + chart1.ChartAreas[0].AxisY.StripLines.Count };
Поскольку Tag
имеетвведите object
, вы можете создать класс для хранения дополнительной информации, такой как краткое имя и описание.
Обновление : я только что заметил, что вы знаете о Tags
и о том, как онине сериализовано.Тем не менее, вы можете использовать этот обходной путь:
- Перед сериализацией вы перебираете все
StripLines
и заменяете Text
на: oldText + separator + Tag tag. - После десериализациивы делаете наоборот.
В качестве разделителя вы можете использовать табуляцию (\ t) или другие символы (или строки), которые вы не ожидаете в текстах .. (Вертикальная табуляция, моя оригинальная идея не разрешена в XMLСущность ..)
Вот функция для подготовки Text
и восстановления Tags
:
void StripLineTagger(Chart chart, bool beforeSer)
{
char sep = '\t';
var axes = new List<Axis> { chart.ChartAreas[0].AxisX, chart.ChartAreas[0].AxisX2,
chart.ChartAreas[0].AxisY, chart.ChartAreas[0].AxisY2};
foreach (var ax in axes)
foreach (var sl in ax.StripLines)
{
if (beforeSer) sl.Text = sl.Text + sep + sl.Tag.ToString();
else
{
var p = sl.Text.Split(sep);
sl.Text = p[0];
sl.Tag = p[1];
}
}
}
Это не проверено и не проверяется ...!
Обновление 2:
Вы можете добавить собственный подкласс для замены обычных StripLines
:
class MyStripLine : StripLine
{
new public string Name { get; set; } // looks fine butwon't get serialized
public string ID{ get; set; } // gets serialized
//..
public MyStripLine()
{
}
}
Их можно добавить в StripLinesКоллекции и работа, как и ожидалось.К сожалению, свойство Name
выглядит только хорошо, но не записывается ... хотя использование другого свойства (ID
) просто, я не могу заставить работать десериализацию.