Ehm, umm, это означает, что некоторые линии должны быть двухслойными по размеру. Мой босс считает, что это более простое решение, чем ограничение отображаемого текста на ширину и не нравится горизонтальная полоса прокрутки > _ <
Winforms DotNet Элементы ListBox для переноса слов, если ширина строки содержимого больше ширины ListBox?
Ответ 1
lst.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
lst.MeasureItem += lst_MeasureItem;
lst.DrawItem += lst_DrawItem;
private void lst_MeasureItem(object sender, MeasureItemEventArgs e)
{
e.ItemHeight = (int)e.Graphics.MeasureString(lst.Items[e.Index].ToString(), lst.Font, lst.Width).Height;
}
private void lst_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.DrawFocusRectangle();
e.Graphics.DrawString(lst.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
}
Ответ 2
Проверьте этот ответ. Он переопределяет шаблон списка с текстовым блоком, который обертывает текст. Надеюсь, это полезно. Чтобы решить вашу проблему, я думаю, что вы добавили: ScrollViewer.HorizontalScrollBarVisibility = "Отключено". Найденный здесь
Ответ 3
private void lst_MeasureItem(object sender, MeasureItemEventArgs e)
{
e.ItemHeight = (int)e.Graphics.MeasureString(lst.Items[e.Index].ToString(), lst.Font, lst.Width).Height;
}
private void lst_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.DrawFocusRectangle();
e.Graphics.DrawString(lst.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
}
Чтобы получить правильный элемент отображения, который будет отображаться при привязке данных, замените
lst.Items[e.Index].ToString()
с литой версией свойства. Поэтому, если ваш источник привязки является классом Object Car, он будет выглядеть как
((Car)lst.Items[e.Index]).YourDisplayProperty
Затем вышеуказанные функции могут правильно измерить строку и нарисовать ее.:)
Ответ 4
Чтобы сделать привязку правильной, обязательно добавьте функцию lst.Items.Count > 0 "в функцию lst_MeasureItem. Вот мой пример:
if (lst.Items.Count > 0)
{
e.ItemHeight = (int)e.Graphics.MeasureString(lst.Items[e.Index].ToString(), lst.Font, lst.Width).Height;
}
Все остальное, похоже, хорошо работает после этого.