C# WPF für jeden Button ändere farbe?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Wenn du mit WPF arbeiten möchtest, würde ich dir empfehlen, dich erst einmal mit XAML und mit dem MVVM-Pattern auseinanderzusetzen. Beides ist notwendig, um die folgende Lösung verstehen und einsetzen zu können. Mit dem Windows Forms-Ansatz solltest du erst gar nicht beginnen.

Lernquellen für WPF und MVVM findest du hier:

Zur Problemlösung: Für Buttons kann man eine Style Ressource anlegen und diese allen Buttons zuordnen. Ein DataTrigger kann sich dann an ein Property im ViewModel binden. Wenn sich dessen Wert ändert, ändert sich auch die Farbe der Buttons.

In diesem Beispiel würde allen Buttons im Fenster eine blaue Schriftfarbe zugewiesen werden und im Falle, dass ein Property ErrorOccured den Wert true hat, die Farbe rot.

<Window.Resources>
  <Style TargetType="{x:Type Button}">
    <Setter Property="Foreground" Value="Blue" />
    <Style.Triggers>
      <DataTrigger Binding="{Binding ErrorOccured}" Value="True">
        <Setter Property="Foreground" Value="Red" />
      </DataTrigger>
    </Style.Triggers>
  </Style>
</Window.Resources>

Im ViewModel hätte man das gebundene Property:

private bool _errorOccured;

public bool ErrorOccured
{
  get => _errorOccured;
  set
  {
    if (_errorOccured != value)
    {
      _errorOccured = value;
      NotifyPropertyChanged(nameof(ErrorOccured));
    }
  }
}

Es muss das INotifyPropertyChanged-Interface implementieren sowie eine NotifyPropertyChanged-Methode:

private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
  PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
Palladin007  16.05.2021, 23:21
Lernquellen für WPF und MVVM findest du hier

Oder das kostenlose Buch Visual C# 2012, das geht auch auf WPF ein.
Oder der kostenpflichtige Nachfolger "Visual C# 2019", gibt's z.B. bei Amazon.

0
Matto247  17.05.2021, 13:40

MVVM kann man machen, man muss es aber nicht zwingend verwenden. Einem offensichtlichen Anfänger so etwas als Einstieg vorzuschlagen finde ich etwas übertrieben.

0
regex9  17.05.2021, 14:24
@Matto247
  1. Von einem Zwang war nie die Rede. Ich werde trotzdem keine andere Lösung vorschlagen.
  2. Wenn jemand schon mit Windows Forms gearbeitet hat, stufe ich diese Person nicht mehr als Anfänger ein und Einstiegsmaterial zu WPF und MVVM habe ich kaum übersehbar aufgelistet. Anfängern würde ich generell die Arbeit mit WPF nicht empfehlen.
0