2013-07-17 78 views

回答

-1

我通過XAML發現了一個簡單的解決方案。在ComboBox資源中,我們可以設置文本框的樣式並通過setter設置maxlenth。

<ComboBox Name="comboBox" Width="100" IsEditable="True"> 
    <ComboBox.Resources> 
     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="MaxLength" Value="yourValue"/> 
     </Style> 
    </ComboBox.Resources> 
</ComboBox> 

編輯:這適用於Actipro組合框。對於通常的comboBox來使這項工作,看看here

+0

我想使用此解決方案,但它似乎不適用於我。我錯過了什麼嗎? –

+0

@TieleDeclercq我不能說沒有看到你的代碼 – Sasha

+0

我有一個新的WPF項目中的例子中的確切代碼。將'yourValue'更改爲10.但它不限制我輸入超過10個字符,因爲它與TextBox一樣。測試4,4.5和4.6 –

0

ComboBox Class(MSDN):

<ComboBox> 
    Items 
</ComboBox> 

輸入的長度取決於你把它的項目。因此你不能設置該屬性。然而,文本框確實有max length

<TextBox MaxLength="20"> 
    Text 
</TextBox> 
+0

答案中提到的錯誤事實。 Combobox具有IsEditable屬性,當設置爲true時,用戶可以像在TextBox中一樣輸入文本。因此輸入的長度取決於用戶輸入,而不僅僅是ComboBox的項目。 – Liero

0

我用PreviewKeyDown事件,很簡單+你可以顯示警告或什麼的。
將以下方法註冊到您的ComboBox.PreviewKeyDown + =事件中,
如果用戶按空間鍵,則不會觸發KeyDown事件。

private void ComboBox_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (ComboBox.Text.Length > 19) // allow max 20 chars 
    { 
     if (e.Key != Key.Back) // allow removing chars 
     { 
      e.Handled = true; // block any additional key press if there is more than allowed max 
      System.Media.SystemSounds.Beep.Play(); // optional: beep to let user know he is out of space :) 
     } 
    } 
} 
+0

這不起作用,但也阻止了像做SHIFT + LEFT這樣的事情來選擇所有文本和其他怪癖。 –

1

只是爲了讓故事完整:

你有兩種選擇:

  • 組合框顯然包含在其模板TextBox。您需要找到訪問TextBox的方法,可能通過Combobox Template並將其設置爲MaxLength

  • 您可能會將Combobox.Text綁定到viewmodel屬性。您可以使用INotifyDataErrorInfo在視圖模型中進行驗證,甚至可以從setter中引發異常。如果超過最大允許長度,用戶將看到錯誤消息。我認爲從用戶體驗角度來看這更好。不幸的是,如果你還沒有使用INotifyDataErrorInfo,那麼使它工作還有很多工作要做。

相關問題