【发布时间】:2015-10-22 19:16:56
【问题描述】:
我在对齐列表框中的字符串内容时遇到问题。这是一个精炼的示例,演示了我的应用遇到的问题:
基本 XAML 用户界面:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="687" Loaded="Window_Loaded">
<Grid>
<ListBox x:Name="lstClients" HorizontalAlignment="Left" Height="220" Margin="28,22,0,0" VerticalAlignment="Top" Width="625"/>
</Grid>
</Window>
后面的代码:
Class MainWindow
Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
Dim names() As String = {"Cook, Adam", "Renolds, Bridgette", "Smith, Carla", "Doe, Daniel",
"Redmond, Ebenezer", "Kelly, Francine"}
Dim ids() As String = {"123456", "654321", "112345", "274587", "128493", "937401"}
Dim dob() As String = {"1/2/80", "4/17/88", "8/31/72", "6/11/91", "10/27/81", "3/3/75"}
Dim phones() As String = {"1234567890", "2536772364", "1537779004", "7586712164", "8548778384", "0987654321"}
For i As Integer = 0 To 5
lstClients.Items.Add(FormatClientString(names(i), ids(i), dob(i), phones(i)))
Next
End Sub
Private Function FormatClientString(name As String, id As String, birthDate As String, phone As String)
Dim clientString As String
clientString = String.Format("{0, -52} {1, -17} {2, -20} {3}", name, id, birthDate, phone)
Return clientString
End Function
End Class
这就是我真正想要完成的事情(糟糕的绘画编辑,但基本上我只想让列对齐,不管客户姓名的长度如何):
根据我的阅读,String.Format 应该做我想做的事,但输出永远不会正确。我还尝试对每个字符串(姓名、id、dob 和电话)使用 String.PadRight,但得到了相同的行为(未对齐的列)。
我是否忽略了一些简单的事情?
编辑:我实际应用中的控件不是 ListBox。它是来自 WPF Toolkit 的 AutoCompleteBox。我使用上面的 ListBox 作为示例,因为它在格式化字符串时表现出相同的行为,并且更容易制作一个简单的示例。
如果有人知道如何将列添加到 AutoCompleteBox 的下拉建议中,那也可以,因为这是最终目标。
【问题讨论】:
-
等宽字体的每个字母和空格的宽度不同。但是你为什么不改用 ListView 呢?
-
@Steve 实际上,它是来自WPF Toolkit 的AutoCompleteBox,但未对齐行为在ListBox 中是相同的(我使用
List(Of String)作为AutoCompleteBox 的ItemsSource)。 -
正如我所说的。问题是由您的控件使用的字体引起的。它是一种比例字体,因此您无法使用空格创建特定宽度的列来填充缺失的字符。尝试设置一个固定宽度的字体,如 Consolas,你会看到不同之处。简单的解决方案是使用“知道”“多列”含义的控件。
-
我删除了我的回答,因为你更新了问题
-
@Steve 你成功了。我将其更改为 Consolas 并且有效。将此作为答案提交,我会标记它。
标签: wpf vb.net string-formatting