Aufhellen der Hintergrundfarbe auf Knopfdruck pro Bindung mit Konverter
Ich möchte einen Schaltflächenhintergrund beim Klicken aufhellen. Also habe ich folgendes gemacht:
<converter:ColorLightConverter x:Key="colorLightConverter" />
...
<Style BasedOn="{StaticResource default}" TargetType="{x:Type controls:Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls:Button}">
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="{Binding Path=Background.Color, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource colorLightConverter}}" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
<Border Background="{TemplateBinding Background}"
BorderBrush="Transparent"
BorderThickness="0">
...
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Der Konverter:
class ColorLightConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Color color = (Color)value;
System.Drawing.Color lightColor = ControlPaint.Light(System.Drawing.Color.FromArgb(color.A, color.R, color.G, color.B));
return Color.FromArgb(lightColor.A, lightColor.R, lightColor.G, lightColor.B);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Der Konverter wird jedoch nicht aufgerufen, wenn ich auf die Schaltfläche klicke. Ich denke, es ist etwas falsch mit der Bindung, aber ich kann den Fehler nicht sehen ...
Kannst du mir helfen?
Vielleicht liege ich völlig falsch. Was ich grundsätzlich tun möchte: Wenn Sie auf die Schaltfläche klicken, nehmen Sie die aktuelle Hintergrundfarbe und hellen Sie sie auf. Nicht mehr...
Update 1:Ich habe folgendes versucht:
Binding etwas geändert:
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="{Binding Path=Background.Color, RelativeSource={RelativeSource Self}, Converter={StaticResource colorLightConverter}}" />
</Trigger>
Konverter geändert (gibt jetzt einen SolidColorBrush zurück):
class ColorLightConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Color color = (Color)value;
System.Drawing.Color lightColor = ControlPaint.Light(System.Drawing.Color.FromArgb(color.A, color.R, color.G, color.B));
return new SolidColorBrush(Color.FromArgb(lightColor.A, lightColor.R, lightColor.G, lightColor.B));
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Jetzt wird der Konverter aufgerufen, aber er wird immer wieder aufgerufen, sodass nach einigen Sekunden eine Stackoverflow-Ausnahme ausgelöst wird. Woher kommt diese unbestimmte Schleife? Ich bin im Moment wirklich ein bisschen verwirrt ...