2010-12-16 10 views
5

WPFコンボボックスのテキストボックス領域にテキストを入力できる編集可能なコンボボックスを使用しています。入力されたテキストの長さがコンボボックスの幅より大きい場合、カーソルはコンボボックスの外側とフォーム上に表示されますが、テキストは表示されません。コンボボックスから移動しないようにカーソルを制限する方法はありますか?WPF Combobox:長さ>コンボボックスの幅のテキストを入力しようとするとカーソルが範囲外になる

ありがとうございました。

答えて

0

default styleを無効にして、コンテンツプレゼンテーション(PART_EditableTextBox)に使用されているTextBoxMaxLengthプロパティを設定し、必要に応じてそのスタイルを再利用できます。

コードで行うことをお望みなら、これはSO answerをチェックアウトすることができます。これは同じ動作を実現しますが、スタイルを強制的に作成することはありません。

EDIT:

あなたは、これはよりダイナミックになりたい場合は、measure the textする必要があります。 TextChangedイベントを処理して測定を実行できます。

+0

こんにちはAaron、返信ありがとうございます。私は、コンボボックスのテキストエリアに入力される文字数であるMaxLengthを設定します。しかし、ここで問題となるのは、それぞれのキャラクターが異なる量のスペースを占めることです。 xamlでMaxLengthが30に設定されているとしましょう。小文字で入力したときにコンボボックス内に入力すると、大文字で入力するとコンボボックスを超えます。また、異なる文字の組み合わせは、異なる空間を占有する。 – user296623

+0

これは私の考えです:(テキストの折り返しのように)カーソルがコンボボックスコントロールのテキストボックスの端に達する位置を得ることができれば、xamlでハードコードするのではなく、この値をMaxLengthに設定できます。しかし今のところ、これをどうやって行うのか分からない。 – user296623

+0

@ user296623もちろん、このアプローチには注意が必要です。 ComboBoxを可能な限り広くできるようにすることができれば、これは問題ではありません。あなたが別の興味深い領域であることが判明する可能性があるので、ローカライゼーションに対処する必要があるかどうかはわかりません。また、ComboBoxの編集可能な部分を拡大することもできます。その幅は固定されていないため、入力時にComboBoxを大きくすることができます。あなたの根本的な問題が何であるかはっきりしていません。 –

0

あなたはこの解決策を見つけた場合、私は知りませんが、私は同じ問題を抱えていると私は今見ると、それは、コードのこの部分から来ている:

<ControlTemplate x:Key="ComboBoxTextBox" TargetType="{x:Type TextBox}"> 
    <Border x:Name="PART_ContentHost" Focusable="False" Background="{TemplateBinding Background}" /> 
</ControlTemplate> 

...と内部テンプレートのセッターのコンボボックススタイル:

... 
<TextBox x:Name="PART_EditableTextBox" Style="{x:Null}" Template="{StaticResource ComboBoxTextBox}" 
... 

このテンプレートを削除すると、問題が解決され、その他の小さな問題が発生するようです。

0

ボーダーの代わりにPART_ContentHostにScrollViewerを使用します。 例:

<ControlTemplate x:Key="ComboBoxTextBox" TargetType="{x:Type TextBox}"> 
    <ScrollViewer x:Name="PART_ContentHost" Focusable="False" Background="{TemplateBinding Background}" /> 
</ControlTemplate> 
... 
<TextBox x:Name="PART_EditableTextBox" Style="{x:Null}" Template="{StaticResource ComboBoxTextBox}" 
... 
関連する問題