클릭시 배경을 밝게하고 싶습니다. 그래서 나는 다음과 같은 한 :버튼으로 배경색을 밝게하려면 변환기로 바인딩 당
<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>
컨버터 :
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();
}
}
하지만이 버튼을 클릭하면 컨버터가 호출되지 않습니다. 바인딩에 문제가있는 것 같지만 오류가 표시되지 않습니다 ...
도와 주시겠습니까?
아마도 완전히 틀렸어. 기본적으로 원하는 작업 : 단추를 클릭 할 때 현재 배경색을 사용하고 밝게합니다. 아니 더 ...
업데이트 1 :
바인딩을 약간 변경 :
나는 다음과 같은 시도<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="{Binding Path=Background.Color, RelativeSource={RelativeSource Self}, Converter={StaticResource colorLightConverter}}" />
</Trigger>
이 컨버터를 변경 (지금은 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();
}
}
이제 변환기가 호출되었지만 몇 번이고 다시 호출되므로 몇 초 후에 stackoverflow 예외가 발생합니다. 이 무한 루프는 어디에서 오는가? 나는 조금 혼란 스럽다 ...
무한 루프는 Background.Color에 바인딩하고 WPF 속성 시스템으로 속성 변경 알림을 트리거하는 배경 설정, 바인딩이 새로 고침되도록하는 등의 문제가 있습니다. . 바인딩 모드를 OneTime으로 설정하면이 문제를 해결할 수있을 것 같습니다. –
고맙습니다 HighCore, Mode = OneTime이 트릭을했습니다! 이 솔루션을 추가 답변으로 사용 하시겠습니까? – tklepzig