Zedgraph textobj X расположение зависит от длины текста? - PullRequest
2 голосов
/ 29 мая 2010

У меня есть текстовый Zedgraph, который я хочу всегда размещать в одной и той же позиции x, y (образ ASP.NET). Я заметил, что текст не всегда отображается в одной и той же начальной позиции x. Он сдвигается в зависимости от длины текста. Я попытался сделать текст такой же длины, заполнив его пробелами. Это немного помогло, но результат не всегда соответствует. Я использую PaneFraction дляordinType.

Какой правильный способ, чтобы фрагмент текста всегда отображался в одной и той же позиции х? Я использую textobj в качестве заголовка, потому что собственное свойство title всегда отображается по центру, и мне нужно, чтобы мой заголовок был выровнен по левому краю графика.

Ответы [ 2 ]

3 голосов
/ 05 июня 2010

Нет, это не зависит от длины текста, однако ...

Это зависит от различных других вещей:

  • Горизонтальное и вертикальное выравнивание текстового поля (см .: Местоположение )
  • Текущий размер панели. Размер шрифта динамически масштабируется, чтобы соответствовать изменяющемуся размеру диаграммы.
  • Подсчет правильных позиций, чтобы TextObj (или любой другой объект) всегда находился в одном и том же месте, довольно сложно. Поэтому вам нужно избегать как можно больше любых чисел / дробей в координатах вашего местоположения. ZedGraph иногда вычисляет истинное положение довольно странным образом.

Вы не предоставили никакого кода, поэтому трудно сказать, если и где вы допустили ошибку (если есть). Но на вашем месте я бы сделал что-то подобное:

TextObj fakeTitle = new TextObj("some title\n ", 0.0, 0.0); // I'm using \n to have additional line - this would give me some space, margin.
fakeTitle.Location.CoordinateFrame = CoordType.ChartFraction;
fakeTitle.Location.AlignH = AlignH.Left;     // Left align - that's what you need
fakeTitle.Location.AlignV = AlignV.Bottom;   // Bottom - it means, that left bottom corner of your object would be located at the left top corner of the chart (point (0,0))
fakeTitle.FontSpec.Border.IsVisible = false; // Disable the border
fakeTitle.FontSpec.Fill.IsVisible = false;   // ... and the fill. You don't need it.
zg1.MasterPane[0].GraphObjList.Add(fakeTitle);

Я использую ChartFraction координаты вместо PaneFraction (как предполагает Дхаррис), чтобы заголовок был аккуратно выровнен по левой границе диаграммы. В противном случае он будет полностью сброшен на левую сторону (без полей и т. Д.) - так выглядит лучше.

Но убедитесь, что вы не установили слишком большой размер шрифта - он может быть обрезан сверху

0 голосов
/ 05 июня 2010

Вы используете этот конструктор?

TextObj(text, x, y, coordType, alignH, alignV)

Если нет, то убедитесь, что вы устанавливаете alignH на AlignH.Left и alignV на AlignV.Top. Тогда X и Y должны быть 0, 0. PaneFraction, так как координата должен быть правильным вариантом, если я не пропустил ваше намерение.

В качестве альтернативы, вы можете просто скачать код Zedgraph, отредактировать его для выравнивания по левому краю заголовка (или, что еще лучше, предоставить опцию для этого, что должно было быть сделано изначально), а затем использовать его в производстве. Красота с открытым исходным кодом.

...