2009-07-30 3 views
3

私はTextBoxコントロールを使用していて、入力したユーザーの数が多すぎると特定の文字数後に文字が赤色に変わるようにします。ユーザーが「本当に重要な考え方」をタイプしている可能性があるので、私は切り捨てたいとは思わないし、切り詰めると、それを失うだろう。私は入力が無効で、私はTextBoxのスタイルを無効にするように指示する私の基本的なビジネスモデルについて検証しています。wpf TextBoxでは、特定の長さを超える文字列の文字を赤にすることはできますか?

私はStyleにもテキストを入力します。 TextBoxを使用してこれを行うことはできますか、またはRichTextBoxに行く必要はありますか?私の根底にある価値はただのストリングです。

答えて

0

在庫WPF検証メカニズム - ValidationRulesを使用していると仮定します。その場合は、Validation.HasError == trueTriggerを定義し、必要に応じてTextBoxプロパティを設定する必要があります。たとえば、次の例では、テキストが無効であれば赤で強調表示されます。

<TextBox> 
    <TextBox.Text> 
    <Binding ...> 
     <Binding.ValidationRules> 
     ... 
     </Binding.ValidationRules> 
    </Binding> 
    </TextBox.Text> 
    <TextBox.Style> 
    <Style TargetType="{x:Type TextBox}"> 
     <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="True"> 
      <Setter Property="Foreground" Value="Red" /> 
     </Trigger> 
     </Style.Triggers> 
    </Style> 
    </TextBox.Style> 
</TextBox> 
+0

これは、テキストボックスのテキストの色を変更します。希望するのは、特定の文字の後にのみテキストの色を変更することです。私は最初の文字を黒色にし、200以上の文字を入力すると、例えば201stが赤くなります。 –

+0

さて、私は今理解しています。はい、あなたは間違いなくその種類のもののために 'RichTextBox'が必要であり、おそらくカスタムコンバータが起動するでしょう。 –

1

これは狂気の答えのようなものであり、私はまだそれを試していないが、それが動作するかどうか、あなたの代わりにリッチテキストボックスのテキストボックスを使用し続けることができるでしょう。

グラデーションブラシを使用してテキストをペイントした場合(またはテキストでない場合は、テキストボックスの背景が受け入れ可能な場合)はどうでしょうか?

入力が長すぎて赤色の後区になるまで白くなるようにグラデーションを作成します。もちろん、テキストが長すぎるまで、ブラシはすべて白くなります。

グラデーション定義を正しく取得するためのテキスト測定(比例フォントは入力された文字に応じて有効な領域が異なるサイズになるため)と は、入力された文字ごとにブラシを計算して割り当てる必要があります。

+0

はおもしろいと思う、あなたは正方形の外で考えている。私はリッチテキストボックスを調べて、それに文字列をバインドすると思います。 –