2015-09-03 21 views
1

我有TextBox並將MaxLength設置爲10,但按下Enter鍵時它將接受11個字符。看起來它計數爲\ n \ r爲1個字符而不是2個。無論如何可以將它計數爲\ n \ r作爲兩個字符長度嗎?WinRT TextBox MaxLength不會將 n r計爲兩個字符

+0

漂亮,很難想象一個多行文本框只接受10個有用的字符。我的水晶球說你忘了將AcceptsReturn屬性設置爲False。 –

+2

10個字符的字符串確實不太可能出現換行符,但問題仍然與更高的數字相關。 (爲什麼不允許在文本中換行,比方說,將存儲在一個固定大小的char(10)'DB列?)中 – andreask

回答

2

如果你真的想允許換行符在文本框,並限制其文本的長度,我看到兩個選項:

  • 通過轉換綁定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" />

相關問題