1
我有TextBox
並將MaxLength
設置爲10,但按下Enter鍵時它將接受11個字符。看起來它計數爲\ n \ r爲1個字符而不是2個。無論如何可以將它計數爲\ n \ r作爲兩個字符長度嗎?WinRT TextBox MaxLength不會將 n r計爲兩個字符
我有TextBox
並將MaxLength
設置爲10,但按下Enter鍵時它將接受11個字符。看起來它計數爲\ n \ r爲1個字符而不是2個。無論如何可以將它計數爲\ n \ r作爲兩個字符長度嗎?WinRT TextBox MaxLength不會將 n r計爲兩個字符
如果你真的想允許換行符在文本框,並限制其文本的長度,我看到兩個選項:
MaxLength
,使其按照多少行改變其值如this question所示,或者,您可以定義自己的附屬屬性MaxLength
,以正確計算文本長度。這可能看起來有點像下面的(只是作爲一個例子,你需要去適應,要考慮到特殊情況等):
public class TextBoxExtensions: DependencyObject
{
public static readonly DependencyProperty MaxLengthProperty = DependencyProperty.RegisterAttached(
"MaxLength", typeof (int), typeof (MaxLengthBehavior), new PropertyMetadata(default(int), PropertyChangedCallback));
public static void SetMaxLength(DependencyObject element, int value)
{
element.SetValue(MaxLengthProperty, value);
}
public static int GetMaxLength(DependencyObject element)
{
return (int) element.GetValue(MaxLengthProperty);
}
private static void PropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args)
{
var tb = dependencyObject as TextBox;
if (tb != null)
{
tb.KeyDown -= TbOnKeyDown;
tb.KeyDown += TbOnKeyDown;
}
}
private static void TbOnKeyDown(object sender, KeyRoutedEventArgs args)
{
var tb = sender as TextBox;
if (tb != null)
{
int max = GetMaxLength(tb);
if (tb.Text.Length >= max)
args.Handled = true;
}
}
}
<TextBox local:TextBoxExtensions.MaxLength="10" />
漂亮,很難想象一個多行文本框只接受10個有用的字符。我的水晶球說你忘了將AcceptsReturn屬性設置爲False。 –
10個字符的字符串確實不太可能出現換行符,但問題仍然與更高的數字相關。 (爲什麼不允許在文本中換行,比方說,將存儲在一個固定大小的char(10)'DB列?)中 – andreask