2016-05-07 7 views

Antwort

1

Bind Ihre TextBox ‚s Background auf eine string Eigenschaft, wir nennen es Word

Dann ein ValueConverter verwenden, um die Word zu einem Color zu konvertieren, wollen wir es WordColorConverter nennen (was eine Klasse ist die Umsetzung IValueConverter)

Ihr xaml würde so aussehen, vorausgesetzt, es ist in einem Window und Sie platzieren die WordColorConverter in Ihrem local Namensraum

<Window.Resources> 
    <local:WordColorConverter x:Key="WordColorConverter"/> 
</Window.Resources> 

<Grid> 
    <TextBox Text="{Binding Word}", 
       Background="{Binding Word, Converter={StaticResource WordColorConverter}}"/><</ 
</Grid> 

Und Ihre WordColorConverter Klasse würde wie folgt aussehen ...

class WordColorConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      string word = (string)value; 
      if (word.Equals("correct word")) 
      { 
       return new SolidColorBrush(Colors.Green); 
      } 
      else 
      { 
       return new SolidColorBrush(Colors.Red); 
      } 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

EDIT: Sie könnten versuchen, diese für MultiBinding

<TextBox Text="{Binding InputWord, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"> 
    <TextBox.Background> 
     <MultiBinding Converter="{StaticResource WordColorConverter}"> 
      <Binding Path="InputWord" /> 
      <Binding Path="CorrectWord" /> 
     </MultiBinding> 
    </TextBox.Background> 
</TextBox> 


public class WordColorConverter : IMultiValueConverter 
    { 
     public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
     { 
      string inputWord = (string)values[0]; 
      string correctWord = (string)values[1]; 
      if (inputWord.Equals(correctWord)) 
      { 
       return new SolidColorBrush(Colors.Green); 
      } 
      else 
      { 
       return new SolidColorBrush(Colors.Red); 
      } 
     } 

     public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
     { 

      throw new NotImplementedException(); 
     } 
    } 
+0

Obwohl diese Lösung ziemlich clever ist, denke ich, dass es nur die halbe Wahrheit ist. Es wäre besser, wenn Sie ** ein Wort weitergeben könnten, das diesen Konverter viel nützlicher machen würde. Ich schlage vor, CommandParameter zu verwenden und das gewünschte Wort einzugeben. –

+0

Danke! Was passiert, wenn ich eine Datei lesen und konvertieren muss? Nehmen wir an, eine .txt-Datei ist meine Datenbank für das Kreuzworträtsel? – Daniel

+0

@Daniel, Sie haben einige Optionen. Mike Eason schlug 'CommandParameter' vor. Sie können auch 'MultiBinding' betrachten. –

0

Sie könnten versuche so etwas;

<TextBox> 
     <TextBox.Style> 
      <Style TargetType="{x:Type TextBox}"> 
       <Setter Property="Foreground" Value="Red"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=aCertainTextBox, Path=Text}" Value="CorrectWord"> 
         <Setter Property="Foreground" Value="Green" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </TextBox.Style> 
    </TextBox> 

Das sieht auf den Wert von „aCertainTextbox“, wenn die Textbox Text ist „CorrectWord“ es die Farbe des Textes auf Grün setzt, sollte ein anderer Begriff es rot. Offensichtlich müssen Sie die Namen von "ACertainTextBox" und "CorrectWord" auf das eigentliche Wort und den tatsächlichen Namen von "aCertainTextbox"

Verwandte Themen