0

var a1 = "HEL"; var a2 = "你好"; var a3 = "LLO"; var 长度 = 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 对齐。

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

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

谢谢

编辑

归根结底,我希望将其显示到以下相关项目:

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

不想使用gridview。

4

2 回答 2

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 列被迫相应增长。

于 2010-02-11T01:10:02.673 回答
0
<ListBox
     x:Name="listBox" HorizontalContentAlignment="Right"/>

核实 :)

于 2010-02-11T00:16:58.960 回答