Verwendung eines booleschen Farbkonverters in XAML
Arbeite ich auf WPF-Anwendung.Ich habe gebunden mein textblock zu meinem button. Ich möchte festlegen Vordergrund meiner textblock schwarze Farbe, wenn seine zugeordnete Taste isEnabled-Eigenschaft der Wert true.
Ich möchte dies tun, mit Konverter. , Sondern seine nicht funktioniert. auch geben nicht alle Fehler.
Ich habe erklärt folgende Klasse in meine "Modelle" - Ordner.
public class BrushColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((bool)value)
{
{
return System.Windows.Media.Colors.Black;
}
}
return System.Windows.Media.Colors.LightGreen;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Schaltfläche aktivieren,isable änderungen der Eigenschaft von viewmodel(e.g mit RaiseCanExecuteChanged)())
textblock-bezogene Dinge in XAML sind:
<Window.Resources>
<local:BrushColorConverter x:Key="BConverter"></local:BrushColorConverter>
</Window.Resources>
<Button>(!..all button properties..!)</Button>
<TextBlock x:Name="AnswerText"
Text="Answer"
Foreground="{Binding ElementName=AnswerButton,Path=IsEnabled, Converter={StaticResource BConverter}}"
TextWrapping="Wrap"/>
InformationsquelleAutor der Frage deathrace | 2011-12-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
verwenden
return new SolidColorBrush(Colors.Schwarz);
InformationsquelleAutor der Antwort
Die obige Antwort zeigt Ihnen, wie richtig Sie einen Konverter verwenden. Jedoch tun Sie wirklich brauchen, um einen Konverter verwenden? Dies können Sie im XAML nur mit
Triggers
:XAML
Im obigen Beispiel, die erste
TextBlock
Bindung an seine ElternIsEnabled
Eigenschaft mit einerDataTrigger
wird, und legt dieForeground
zu etwas Farbe, wenn es wahr ist.Dies ist jedoch übertrieben - die
IsEnabled
Eigenschaft wird weitergegeben an die Kinder automatisch durch die WPF. Das ist, wenn SieIsEnabled
false auf IhreButton
dann IhreTextBlock
wird seineIsEnabled
- Eigenschaft aktualisiert auf false automatisch. Dies zeigt sich in der zweitenTextBlock
was nutzt eine EigenschaftTrigger
um zu prüfen, Ihre eigenenIsEnabled
- Eigenschaft auf den Wert true (da IhreIsEnabled
Eigenschaft werden die gleichen sein wie seine Eltern). Dies wäre die bevorzugte Lösung.Hoffe, das hilft!
InformationsquelleAutor der Antwort F Ruffell
Machen diese Konverter, Allgemeine Sie können ein
ConverterParameter
für die Angabe der Farben, die eingefügt werden, wennvalue
ist true oder false. Auch die Deckkraft kann von Interesse sein. Ich bieten hier die Converter, die ich unter dem parameter [ColorNameIfTrue;ColorNameIfFalse;OpacityNumber].Da die
SolidColorBrush()
Methode erwähnt von @user1101511 ist Teil derSystem.Windows.Media
Bibliothek, verwendet es dieColor
Art, aus der gleichen Bibliothek. Dieser Typ verfügt nicht über einenColor.FromName()
Methode, wie dieSystem.Drawing.Color
Klasse.Daher machte ich eine helper-Methode genannt
ColorFromName(string name)
. Ich geben Sie"LimeGreen"
als fallback-Farbe, wenn die interpertation vonConverterParameter
ausfällt. In meinem Fall möchte ich die Ausgabe"Transparent"
wennvalue
ist falsch.Xaml die oben genannten Konverter kann z.B. so verwendet werden:
InformationsquelleAutor der Antwort Håkon Seljåsen