我有一個要求,要計算UWP TextBox中的行數。這是為了強制執行TextBox中所允許的最大行數。從理論上講,這似乎非常簡單,但在實踐中,它似乎并不那么清晰。
我們的要求是一個不會水平或垂直滾動的文本框。當它達到寬度限制時,它就會被包裹起來 - 而且,當它達到最大行數時,它應該不垂直滾動,而是應該禁用任何進一步的輸入。用戶也可以按回車鍵來添加他們想要的任何新行,但不能超過最大行數。
我不認為我可以在TextBox上設定xaml屬性的組合來實作這一點,所以我認為它必須是在文本更改事件中。所以為了對行數進行限制,我必須對它們進行計數。我曾嘗試這樣做:
int numLines = txtBox.Text.Split(new string[ ] { "
" }, StringSplitOptions.None).Length。
if (numLines > maxLines)
{
//拒絕編輯。
}
然而,這只回傳用戶手動輸入的換行符--而不是被包起來的行! 被包裹的換行符似乎根本不會以任何ascii字符的形式出現在Text屬性中,所以檢測它們很困難。
我的問題是:我怎樣才能對TextBox控制元件中的行數進行限制,同時考慮到包裹的行和換行?
uj5u.com熱心網友回復:
然而,這只回傳用戶手動輸入的換行符--而不是換行符!
TextBox包含GetRectFromCharacterIndex方法,你可以用來獲取特定字符的矩形。矩形有行高和行底值,你可以用行底/行高計算出當前的行數。
下面是TextBox最后一個字符的行數計算步驟。
var specificRect = MyTextBox. GetRectFromCharacterIndex(MyTextBox.Text. Length-1, true)。)
var lineNumber = Math.Round(specificRect.Bottom / specificRect.Height) 。
System.Diagnostics.Debug.WriteLine("Line Number:"/span> lineNumber)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/312699.html
標籤:
