我想設定啟用 TextWrap 的文本框中的最大行數。我為這個答案嘗試了多個地方,但我失敗了。請幫我找到答案。
更新:當前的解決方案建議計算字符總數或按換行符拆分內容并計算行數,但這些解決方案在啟用文本換行時無法提供預期結果。
uj5u.com熱心網友回復:
文本換行為限制TextBox 中的行數增加了一個新維度,為此我們需要注意行數可能會受到作業系統級別應用的解析度和縮放因子的影響,而且還使用了許多布局概念在 UWP 布局中,通常是相對的或動態的,并且影響視覺狀態的方式很難對所有用戶保持一致。
例如,在一個用戶的運行時中僅適合兩行的文本可能很容易為另一個用戶換成 3 行,或者當表單的寬度發生變化時。
即使在盡最大努力將換行的文本框限制為特定的行數之后,我們也不得不期待隨著時間的推移,我們會弄錯,如果行數出于布局原因很重要,那么您可能會考慮修剪或截斷文本甚至使用RichTextBlockOverflow
您可以從如何測量 UWP 應用中的文本大小?,然后根據文本的高度進行驗證,而不是具體的行數。
但是,我過去也通過將 TextBox 設定為固定高度(當然還有寬度)并針對 Scrollbar 狀態進行了驗證,從而獲得了成功。不幸的是,很難直接訪問垂直滾動條的可見性,但我們可以在模板內的元素上使用ExtentHeight和。ViewportHeightScrollViewerTextBox
如果
ExtentHeight大于ViewportHeight則滾動條應該可見。如果可視布局只允許您想要支持的總行數,那么滾動條不應該是可見的。
訪問ScrollViewer變得有趣,這里討論了選項How do access the scrollviewer of a TextBox in code
因此,嘗試將此作為對@10 Develops 解決方案的改編:
private void textBox_TextChanged(object sender, RoutedEventArgs e)
{
var scroller = (sender as TextBox).FindChild<ScrollViewer>();
if (scroller.ExtentHeight > scroller.ViewportHeight)
{
Debug.WriteLine("Limit reached");
//your code here
}
}
在一個靜態類定義的本擴展方法:
(使用模式匹配,所以有點不同于原始參考柱)
public static T FindChild<T>(this DependencyObject parent) where T : UIElement
{
if (parent is T matchedParent) return matchedParent;
int children = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < children; i )
{
DependencyObject child = VisualTreeHelper.GetChild(parent, i);
if (child is T matchedChild)
return matchedChild;
else
{
T tChild = FindChild<T>(child);
if (tChild != null) return tChild;
}
}
return null;
}
我通常不使用它來驗證內容,但我確實使用它來向工具列添加按鈕,允許用戶快速滾動到內容的頂部或底部,并切換此類控制元件的可見性。
uj5u.com熱心網友回復:
所以基本上你可以計算行數并做一些限制。要計算行數,請使用以下代碼:
private void textBox_TextChanged(object sender, RoutedEventArgs e)
{
int t = textBox.Text.Split('\n').Length;
if(t > 9)
{
Debug.WriteLine("Limit reached");
//your code here
}
}
這是一個基本的代碼,但原理是一樣的。要限制行,您可以禁用進一步插入新行字符或其他限制。
uj5u.com熱心網友回復:
如何使用 XAML 和 C# 在 UWP 中的 TextBox 中設定行數限制
在 UWP TextBox 中沒有辦法完美地做到這一點。與 WPF 的 TextBox 具有TextBox.MaxLines 屬性不同,UWP 中的 TextBox 類沒有這樣的內置屬性。就像@10 Devlops 所說的那樣,您需要自己做這件事。
除了@10 開發提供的解決方案之外,我的建議是使用TextBox.MaxLength 屬性,它可以限制 TextBox 中文本的最大長度。您可以將此屬性與 @10 開發提供的解決方案結合使用,以獲得取決于您自己的方案的新解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/404813.html
標籤:
上一篇:如何為MAUIWindows應用程式強制使用淺色主題?
下一篇:如何將屬性作為引數傳遞給Converter并且屬性在串列itemsource背景關系xaml之外-Xamarin
