아직도 wpf를 완전히 이해못해서 헤매고 있네요.
컨트롤에 마우스 커서를 올릴때 백그라운드를 파랗게 바꾸는 기본 동작을 제거하고
제가 지정한 색상으로 바꾸고 싶은데 이게 안됩니다.
컨트롤의 정의는 이렇습니다.
<ToggleButton.Resources>
<Style TargetType="{x:Type local:RoundToggleButton}">
<Setter Property="Background" Value="Green"/>
<Setter Property="MouseOverColor" Value="Red"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:RoundToggleButton}">
<Border x:Name="border"
Background="{TemplateBinding Background}" >
<StackPanel>
<ContentPresenter/>
<TextBlock Text="바인딩"
Foreground="{TemplateBinding MouseOverColor}"/>
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{Binding MouseOverColor, RelativeSource={RelativeSource AncestorType=local:RoundToggleButton}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ToggleButton.Resources>
</ToggleButton>
코드 비하인드 부분입니다.
public partial class RoundToggleButton : ToggleButton
{
public static DependencyProperty MouseOverColorProperty;
public Brush MouseOverColor
{
get => (Brush)GetValue(MouseOverColorProperty);
set => SetValue(MouseOverColorProperty, value);
}
static RoundToggleButton()
{
MouseOverColorProperty = DependencyProperty.Register(
nameof(MouseOverColor),
typeof(Brush),
typeof(RoundToggleButton),
new FrameworkPropertyMetadata()
{
AffectsRender= true,
Inherits= true,
BindsTwoWayByDefault = true,
});
}
public RoundToggleButton()
{
InitializeComponent();
}
}
MouseOverColor가 제가 사용하고자 하는 브러쉬인데
Setter에서 MouseOverColor를 설정해도 TextBlock의 Foreground만 제대로 바뀌고
Trigger의 Setter로는 Red로 설정한 MouseOverColor가 아닌 기본값이 들어갑니다.
{Binding MouseOverColor}도 안되고요.
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="SeaGreen"/>
</Trigger>
이렇게 Brushes 값을 직접 입력해야 원하던 동작이 되는데
이러면 외부에서 바꾸지 못하니 제 문제가 해결되지가 않습니다.
Setter를 어떻게 정의해야 이 문제를 해결 할 수 있을까요?
…
자체 해결했습니다!
바인딩 설정 문제였더군요.