0

テキストボックスとラベルを含むユーザーコントロールがあり、ラベルには入力テキストの長さが表示されます(書式設定あり)。テキストが 160 文字を超える場合、テキスト ボックスの背景色を変更したいと考えています。

私はバインディングでこれを達成することを考えていましたが、テキストの長さに置き換えられるタグが含まれているため、同じコンピューティングを行う 2 つの異なるバインディングを使用するつもりはありません。変えることに成功しない

これを達成するための3つの方法を考えることができます:

1)すべてのタグをテキストに置き換えた隠しラベルを作成し、メッセージの長さを表示して背景色を変更するための2つの単純なコンバーターをバインドします。そのような基本的なタスクのための 3 コンバーターは、私には多すぎるように思えます。

2) text_changed イベントを使用して作業を行います。これは機能しますが、WPFで行う方法ではないようです。

3) マルチバインディングを使用し、フォームをソースとして渡します。これは機能するはずですが、「神のオブジェクト」アプローチが多すぎます。

それについてどう思いますか ?よりクリーンでシンプルなソリューションがありませんか?

どんな提案でも大歓迎です、よろしくお願いします。

4

2 に答える 2

0

別のプロパティを作成しTBBackColorて、テキストボックスをそれにバインドできますBackgroundColor。何かのようなもの:

Public System.Windows.Media.Brush TBBackColor
{
   get
   {
      return (TBText.Length>160)? new SolidColorBrush(Color.Red):  new SolidColorBrush(Color.White);
   }
}

そして、あなたのプロパティで覚えておいてください(それがあなたの:TBTextにバインドされている場合)、 propertychanged イベントも発生させる必要があります。TextBoxTextTBBackColor

于 2013-07-05T15:04:46.797 に答える