我在對齊列表框中的字符串內容時遇到問題。以下是一個演示我的應用程序有問題蒸餾例如:如何對齊列表框中的字符串內容文本?
基本XAML UI:
<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
這裏是什麼我實際上正在努力完成(糟糕的繪畫編輯,但基本上我只是希望列對齊,無論長度如何e客戶的名字):
從我讀到的,String.Format應該做我想做的,但輸出是永遠不對。我還嘗試使用String.PadRight爲每個字符串(名稱,ids,dob和電話),但得到相同的行爲(未對齊的列)。
我可以忽略一些簡單的東西嗎?
編輯:我的實際應用程序中的控件不是ListBox。它是一個來自WPF Toolkit的自動完成框。我使用上面的ListBox作爲示例,因爲它展示了格式化字符串的相同行爲,並且更容易做出一個簡單的示例。
如果有人知道如何將列添加到AutoCompleteBox的下拉建議中,那也可以工作,因爲這最終是目標。
比例寬度字體的每個字母和空格都沒有相同的寬度。但是,爲什麼不使用ListView呢? – Steve
@Steve實際上它是一個來自[WPF Toolkit](http://wpf.codeplex.com/releases/view/40535)的自動完成框,但錯誤對齊行爲在ListBox中是相同的(我正在使用'List(Of String)'爲AutoCompleteBox的'ItemsSource')。 –
正如我所說。問題是由您的控件使用的字體引起的。它是一種比例字體,因此您無法使用空格創建特定寬度的列以填充缺失的字符。嘗試設置一個固定寬度的字體,如Consolas,你會看到不同之處。簡單的解決方案是使用一個'知道''多列'意味着什麼的控件。 – Steve