rozjaśnij kolor tła na kliknięcie przycisku na oprawę z konwerterem
Chcę rozjaśnić tło przycisków po kliknięciu. Więc zrobiłem co następuje:
<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>
Konwerter:
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();
}
}
Ale konwerter nie jest wywoływany, gdy klikam przycisk. Myślę, że jest coś złego w powiązaniu, ale nie widzę błędu ...
Możesz mi pomóc?
Może całkowicie się mylę. Co zasadniczo chcę zrobić: Po kliknięciu przycisku weź bieżący kolor tła i rozjaśnij go. Nie więcej...
Aktualizacja 1:Próbowałem:
Zmieniono nieco oprawę:
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="{Binding Path=Background.Color, RelativeSource={RelativeSource Self}, Converter={StaticResource colorLightConverter}}" />
</Trigger>
Zmieniono konwerter (teraz zwraca SolidColorBrush):
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();
}
}
Teraz wywoływany jest konwerter, ale jest wywoływany ponownie i ponownie, więc wyjątek przepływu stosu jest generowany po kilku sekundach. Skąd pochodzi ta nieokreślona pętla? Jestem w tej chwili trochę zdezorientowany ...