在列表框中填充文本

时间:2010-02-11 00:02:53

标签: wpf text listbox padding

var a1 =“HEL”;             var a2 =“HELLO”;             var a3 =“LLO”;             var length = a2.Length + 5;

        listbox.Items.Add(a1.PadRight(length) +"End");
        listbox.Items.Add(a2.PadRight(length) + "End");
        listbox.Items.Add(a3.PadRight(length) + "End");

我有这样的代码显然填充所有文本,以便单词End up up。

问题是我必须将wpf列表框中的字体从Segoe UI更改为Courier New以使其工作。我的应用程序的其余部分使用Segoe UI,所以我认为这看起来很奇怪。

有没有办法用Segoe UI实现结果,或者我可以使用的间距正确的类似字体,或者有人有其他一些我甚至没想过的智能解决方案? : - )

由于

修改

在一天结束时,我希望将其显示为相关项目,如下所示:

ITEM A    -> ITEM B
ITEM X    -> ITEM Y
ITEM C    -> ITEM E

不想使用gridview。

2 个答案:

答案 0 :(得分:1)

分别为ListBox提供两个数据,并使用数据模板。这是怎么回事。

首先,创建一个小类来表示要插入的每个项目:

public class WordPair {
  public string First { get; set; }
  public string Second { get; set; }
}

(您的应用程序中可能已经有一个合适的类和/或集合 - 我假设这些字符串对来自某个地方!)

其次,将ListBox.ItemsSource设置为这些东西的集合:

listBox.ItemsSource = new List<WordPair> {
  new WordPair { First = "ITEM A", Second = "ITEM B" },
  new WordPair { First = "ITEM X", Second = "ITEM Y" },
};

同样,此系列可能已存在于您的应用中。

第三,创建一个指定所需布局的DataTemplate,并将其分配给ListBox.ItemTemplate:

<!-- in your Window.Resources section -->
<DataTemplate x:Key="AlignedPairs">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="*" />
      <ColumnDefinition Width="Auto" />
      <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <TextBlock Text="{Binding First}" Grid.Column="0" />
    <TextBlock Text="->" TextAlignment="Center" Grid.Column="1" />
    <TextBlock Text="{Binding Second}" TextAlignment="Right" Grid.Column="2" />
  </Grid>
</DataTemplate>

<ListBox Name="listBox" ItemTemplate="{StaticResource AlignedPairs}">
  <ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
      <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
  </ListBox.ItemContainerStyle>
</ListBox>

(我已经猜到了你想要的物品准确对齐,但你可以明显地调整它。)

请注意,您还需要使用ListBox.ItemContainerStyle将ListBoxItems的Horizo​​ntalContentAlignment设置为Stretch。否则每个ListBoxItem将只占用它所需的空间,从而导致所有Grid列的大小最小,看起来像直连接。 Stretch使每个ListBoxItem填充整个宽度,因此Grid列被强制相应增长。

答案 1 :(得分:0)

<ListBox
     x:Name="listBox" HorizontalContentAlignment="Right"/>

检查一下:)