答案 0 :(得分:35)
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);
}
答案 1 :(得分:0)
看看这个答案。它使用包含文本的文本块覆盖列表框的模板。希望它有用。为了解决你的问题,我认为你应该添加:ScrollViewer.HorizontalScrollBarVisibility =“Disabled”。找到它here
答案 2 :(得分:0)
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()
带有属性的铸造版本。因此,如果您的绑定源是类对象Car,它看起来像
((Car)lst.Items[e.Index]).YourDisplayProperty
然后上面的函数可以适当地测量字符串并绘制它。 :)
答案 3 :(得分:0)
要使绑定正确,请务必将“list.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;
}
其他一切似乎都很好用。