У меня есть метод, который создает метку в окне. Этот метод отлично работает в Windows под .Net, но когда я запускаю его на моем RPi с использованием моно, появляется только одна строка.
Есть ли какой-нибудь моно-специфичный код, который я могу использовать, чтобы заставить моно показывать весь текст на этикетке?
private void ShowMessageRight(string strMessage, Color backColor, Color foreColor, Single fontSize = 24f)
{
if (_lblMessageRight == null)
{
_lblMessageRight = new Label();
this.Controls.Add(_lblMessageRight);
}
_lblMessageRight.Text = strMessage;
_lblMessageRight.BackColor = backColor;
_lblMessageRight.ForeColor = foreColor;
_lblMessageRight.Font = new Font(new FontFamily("Microsoft Sans Serif"), fontSize, FontStyle.Bold);
_lblMessageRight.TextAlign = ContentAlignment.MiddleCenter;
_lblMessageRight.MaximumSize = new Size(500, 0);
_lblMessageRight.AutoSize = true;
_lblMessageRight.Left = (int)((this.ClientSize.Width * 0.75) - (_lblMessageRight.Width / 2));
_lblMessageRight.Top = (this.ClientSize.Height - _lblMessageRight.Height) / 2;
_lblMessageRight.BringToFront();
_lblMessageRight.Show();
}
Результат идентичных вызовов метода.
В Windows с .net
В Linux с Mono (на RPi)
EDIT:
Итак, я попытался использовать TextRenderer.MeasureText, похоже, это работает, но я очень озадачен, почему. TextRenderer.MeasureText иногда возвращает ширину, которая меньше 500, когда я знаю, что строка длиннее этой. Он вернет высоту, которая в два раза больше высоты шрифта. если я использую это значение в качестве высоты метки, я получаю две строки. TextRenderer.MeasureText, как волшебным образом знает, как долго мне нужен мой ярлык.
Size SingleLineSize = TextRenderer.MeasureText(strMessage, _lblMessageLeft.Font, new Size(Int32.MaxValue, Int32.MaxValue));
strMessage = SingleLineSize.Width + strMessage;
int numberOfLines = (int)Math.Ceiling(SingleLineSize.Width / 500f);
int lineHeight = SingleLineSize.Height;
int height = numberOfLines * lineHeight;