ComboBox の入力テキストの長さを設定するにはどうすればよいですか?
たとえば、20 より長くならないようにします。
私は 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 :)
}
}
}
ストーリーを完成させるために:
次の 2 つのオプションがあります。
Combobox は明らかTextBox
にそのテンプレートに含まれています。Combobox Template
おそらくそれを介して、TextBoxにアクセスする方法を見つける必要がありますMaxLength
おそらく、Combobox.Text を viewmodel プロパティにデータバインドします。INotifyDataErrorInfo を使用するか、setter から例外をスローすることによって、viewmodel で検証を行うことができます。許可されている最大長を超えると、エラー メッセージが表示されます。これはUXの観点から優れていると思います。残念ながら、まだ INotifyDataErrorInfo を使用していない場合、これを機能させるにはかなりの作業が必要です。
XAMLを介して簡単な解決策を見つけました。ComboBox リソースでは、テキスト ボックスのスタイルを設定し、setter set 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 で動作します。これを機能させる通常のコンボボックスについては、こちらをご覧ください