2013-06-07 10 views
5

Ich benötige eine Textfarbe, wenn Text innerhalb eines Textfelds geändert wird und bestimmte Kriterien erfüllt. Ich kann dies von Code hinter mit textbox_textchangeed Ereignis und set brushs.color zu gewünschten Farbe implementieren.Ändern der Vordergrundfarbe des Textfeldes, wenn sich Text ändert und ein bestimmtes Kriterium erfüllt

Aber ich bin nicht in der Lage, dies mit XAML WPF Ansatz zu implementieren. Ich bin neu in WPF, ich bin mir nicht sicher, wie kann ich Textfarbe abhängig von bestimmten Kriterien festlegen, wenn Text im Textfeld ändert.

Zum Beispiel: Wenn Text in einem Textfeld geändert wird, muss bestimmt werden, wenn der Eingabetext eine Zahl ist und dann die Vordergrundfarbe in grün else red geändert wird.

Wir freuen uns auf die Hilfe. Vielen Dank im Voraus.

Antwort

2

Ich bin mir nicht sicher, ob ein bindender Konverter in Ihrer Situation erlaubt ist. Aber hier ist eine Lösung, die nur einen verbindlichen Konverter in Ihrem Code benötigt. Hier

sind der Code in 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> 

Hier wird das View-Modell und die Werteumwandler

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; 
    } 
} 

So ist die Lösung der Daten Trigger verwendet, das Ziel zu erfüllen. Der einzige Grund für die Verwendung von Bindungskonvertern besteht darin, dass Sie einen Ort benötigen, um zu bestimmen, welche Art von Wert den Vordergrund der TextBox ändern soll. Hier ist der Vordergrund von TextBox rot, wenn der Wert der TextBox "1" ist.

+0

Ich habe das implementiert und es funktioniert perfekt. Vielen Dank für die Hilfe :) –

+0

@AarohiS Es ist mir ein Vergnügen. Könnten Sie bitte meinen Beitrag als Antwort auf Ihre Frage markieren? Vielen Dank. :) – Colin

1

Sie sollten nur in der TextChanged Ereignis in WPF einstecken und eine Methode an dieses Ereignis im XAML binden. Dann können Sie prüfen, ob die neuen Werte Ihren Kriterien entsprechen, und die Farbe entsprechend ändern.

Ich bin nicht wirklich sicher, was Sie mit dem "XAML-Ansatz" meinen, aber in diesem Fall, wenn Sie einfach Verhalten an ein Ereignis anfügen möchten, das auf einer Ihrer Steuerelemente ausgelöst wird, denke ich nicht, dass es falsch ist Es ist die Art, wie Sie bereits versucht haben, TextChanged zu verwenden. Aus diesem Grund sind Ereignisse in XAML von Anfang an sichtbar.

+0

Danke.Ich habe diese Textbox: und ich habe codiert als: private void TextBox_TextChanged (object sender, TextChangedEventArgs e) { if (txt_Test.Text == IsANumber) txt_Test.Foreground = Pinsel.Red; sonst txt_Test.Foreground = Brushes.Green; } Aber ich brauche einen anderen Ansatz mit Trigger/Datentrigger von Xaml oder auf andere Weise möglich. –

+0

Ich bin verwirrt, warum Sie hier einen anderen Ansatz brauchen? Ich sehe nichts falsches mit der Art, wie du gerade Sachen machst. Ist es eine Anforderung von Ihrem Arbeitgeber oder etwas? –

+0

Ja, es ist eine Anforderung, XAML-Ansatz statt hinter Code appraoch zu verwenden. –

0

Überprüfen Sie die Länge der Zeichenfolge in der Textbox, die an jeder Eingabe geschrieben wird. Wenn es> 10 ist oder was auch immer Sie wollen, dann ändern Sie die Farbe. Sie könnten auch einen ausgegrauten Button auslösen.

Probe:

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

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

reine XAML? Vielleicht möchten Sie Interaktivität, Interaktion, Trigger?

Using EventTrigger in XAML for MVVM – No Code Behind

IMMO Ich denke, ist besser Code Eigenschaften/Konverter/Verlängerungen hook up, etc ... für eine bessere Wiederverwendung von Code, aber natürlich subjektiv Meinungen ... und am Ende ist immer für dich.

Verwandte Themen