C#通过列表框对齐2个字符串

C#通过列表框对齐2个字符串,c#,winforms,listbox,C#,Winforms,Listbox,在我的列表框中,我想显示以下内容 String 1(left aligned - default) int value(right aligned) 有没有办法做到这一点,或者列表框中只能有一个对齐方式?如果在Winforms中使用,可以使用此代码 您可以将列表框的DrawMode属性设置为DrawMode.OwnerDrawFixed ListBox listBox = new ListBox(); listBox.DrawMode = DrawMode.Ow

在我的列表框中,我想显示以下内容

String 1(left aligned - default)                 int value(right aligned)

有没有办法做到这一点,或者列表框中只能有一个对齐方式?

如果在Winforms中使用,可以使用此代码

您可以将列表框的
DrawMode
属性设置为
DrawMode.OwnerDrawFixed

ListBox listBox = new ListBox();
listBox.DrawMode = DrawMode.OwnerDrawFixed;
listBox.DrawItem += new DrawItemEventHandler(listBox_DrawItem);

void listBox_DrawItem(object sender, DrawItemEventArgs e)
{
    ListBox list = (ListBox)sender;
    if (e.Index > -1)
    {
        object item = list.Items[e.Index];
        e.DrawBackground();
        e.DrawFocusRectangle();
        Brush brush = new SolidBrush(e.ForeColor);
        SizeF size = e.Graphics.MeasureString(item.ToString(), e.Font);
        e.Graphics.DrawString(item.ToString(), e.Font, brush, e.Bounds.Left + (e.Bounds.Width / 2 - size.Width / 2), e.Bounds.Top + (e.Bounds.Height / 2 - size.Height / 2)); 
    }
}

如果你使用WPF。这应该在XAML中工作:

<ListBox.ItemTemplate>
<DataTemplate>
    <Grid>
        <Grid.ColumnDefinition>
            <ColumnDefinition Width="Auto" MinWidth="100"/>
            <ColumnDefinition Width="Auto" MinWidth="100"/>
        </Grid.ColumnDefinition>
        <TextBlock Text="{Binding 1}" HorizontalAlignment="Left"/>
        <TextBlock Text="{Binding value}" HorizontalAlignment="Right" Grid.Column="1"/>
    </Grid>
</DataTemplate>
</ListBox.ItemTemplate>

内存不足!你可能需要调整一下

顺便说一下:“1”和“value”之类的变量名属于错误命名的类别;-)希望这只是为了这篇文章,而不是为了你真正的工作代码

下一次,您还可以弄清楚希望它以何种技术显示(WinForms、WPF、ASP.net等)


Christoph

回答问题时,尽量去掉“个人”语言。答案不像论坛那样健谈,更像是维基百科的条目:)