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。
答案 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的HorizontalContentAlignment设置为Stretch。否则每个ListBoxItem将只占用它所需的空间,从而导致所有Grid列的大小最小,看起来像直连接。 Stretch使每个ListBoxItem填充整个宽度,因此Grid列被强制相应增长。
答案 1 :(得分:0)
<ListBox
x:Name="listBox" HorizontalContentAlignment="Right"/>
检查一下:)