2013-06-07 29 views
5

テキストボックス内でテキストが変更され、特定の基準を満たすときに、テキストの色を設定する必要があります。 textbox_textchangedイベントとを使用してコードの背後から実装できます.brushes.colorを希望の色に設定します。テキストが変更され、特定の条件を満たすときにテキストボックスの前景色を変更する

しかし、私はxaml wpfアプローチでこれを実装することができません。私はwpfを初めて使用していますが、テキストボックス内のテキストが変更されたときに、特定の基準に基づいてテキストの色を設定する方法がわかりません。

例:特定のテキストボックスの場合、テキストが変更された場合は、入力テキストが数字の場合はを、次に前景色を緑色に変更する必要があります。

助けを楽しみにしています。前もって感謝します。

答えて

2

状況にバインディングコンバータが許可されているかどうかはわかりません。しかし、あなたのコードの中にバインディングコンバータだけが必要なソリューションはここにあります。ここ

XAMLのコード

<Grid.Resources> 
     <local:ValueConverter x:Key="ValueConverter"></local:ValueConverter> 
    </Grid.Resources> 
    <TextBox Text="{Binding Text,UpdateSourceTrigger=PropertyChanged}"> 
     <TextBox.Style> 
      <Style> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=Text,Converter={StaticResource ValueConverter}}" Value="True"> 
         <Setter Property="TextBox.Foreground" Value="Red"></Setter> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </TextBox.Style> 
    </TextBox> 

ここそこで溶液は目標を満たすために、データ・トリガを使用するビューモデルと値変換

public class ViewModel : INotifyPropertyChanged 
{ 
    private string _text; 

    public string Text 
    { 
     get 
     { 
      return this._text; 
     } 
     set 
     { 
      this._text = value; 
      if (null != PropertyChanged) 
      { 
       this.PropertyChanged(this, new PropertyChangedEventArgs("Text")); 
      } 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

public class ValueConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (null != value) 
     { 
      if (value.ToString() == "1") 
       return true; 
     } 
     return false; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return null; 
    } 
} 

です。ここでバインディングコンバータを使用する唯一の理由は、TextBoxのフォアグラウンドをどのような値に変更するかを決定する場所が必要なことです。 TextBoxの値が "1"のとき、TextBoxのフォアグラウンドは赤色になります。

+0

私はこれを実装し、それは完全に動作します。助けてくれてありがとう: –

+0

@AarohiSそれは私の喜びです。私のポストをあなたの質問の答えとすることはできますか?どうもありがとうございました。 :) – Colin

1

wpfのTextChangedイベントにプラグインし、XAMLのこのイベントにメソッドをバインドできるだけですみます。次に、新しい値が基準を満たしているかどうかを確認し、それに応じて色を変更することができます。

「XAMLアプローチ」の意味はわかりませんが、この場合、コントロールの1つで発生したイベントに振る舞いを付けるだけの場合は、間違っているとは思わないそれはすでにあなたがTextChangedを使って試みたやり方です。そのため、まずXAMLでイベントが表示されます。

+0

ありがとうございました。私は、このテキストボックスを持っている: <テキストボックス名= "txt_Test" TextChanged = "TextBox_TextChanged" /> と私のようにコーディングされています: ます。private void TextBox_TextChanged(オブジェクト送信者、TextChangedEventArgs E) { 場合(txt_Test.Text == IsANumber ) txt_Test.Foreground = Brushes.Red; else txt_Test.Foreground = Brushes.Green; } しかし、私はxamlや他の方法でトリガー/データトリガーを使用して異なるアプローチが必要です。 –

+0

私はなぜここに別のアプローチが必要なのか、混乱していますか?あなたが今やっているやり方に間違ったことはありません。あなたの雇用主などの要件ですか? –

+0

はい、コードアプラックの背後ではなく、xamlアプローチを使用する必要があります。 –

0

すべての入力に書き込まれているテキストボックス内の文字列の長さを確認します。 > 10またはそれが欲しいものなら、色を変更します。 また、そのトリガーをグレー表示されたボタンにすることもできます。

サンプル:

MyTextBlock.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity)); 

return new Size(MyTextBlock.DesiredSize.Width, MyTextBlock.DesiredSize.Height); 
0

ピュアXAML?インタラクション、インタラクション、トリガーを見たいかもしれませんか?私が思う

Using EventTrigger in XAML for MVVM – No Code Behind

IMMOは、より良いコードの再利用のために...など、コードのプロパティ/コンバータ/拡張にフックアップすることをお勧めですが、...意見の主観もちろん、最後には常に上昇あなたへ。

関連する問題