스위치 컨트롤에 대한 컬러 애니메이션이 있고 배경색을 변경 가능하게하는 경우 부모 컨트롤의 Background
속성을 To
속성 인 ColorAnimation
에 바인딩하고 싶습니다. 나는 많은 노력을했지만 아무도 일하지 않았습니다. 어떻게해야합니까?ColorAnimation의 "To"속성에 배경색을 바인딩하는 방법은 무엇입니까?
스위치 컨트롤 스타일 :
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="CheckBox">
<Viewbox Stretch="Uniform">
<Border x:Name="layer" Width="35" Height="20" CornerRadius="10,10,10,10"
Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Canvas Canvas.Top="0" Canvas.Left="0">
<Ellipse x:Name="circle" Fill="Gray" Stroke="DarkGray" StrokeThickness="0"
Width="20" Height="20">
<Ellipse.RenderTransform>
<TranslateTransform X="0" Y="0"/>
</Ellipse.RenderTransform>
</Ellipse>
</Canvas>
</Border>
</Viewbox>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="layer"
Storyboard.TargetProperty="Background.Color"
To="LightGreen"
Duration="0:0:0.3"/>
<DoubleAnimation Storyboard.TargetName="circle"
Storyboard.TargetProperty="(Ellipse.RenderTransform).(TranslateTransform.X)"
To="15"
Duration="0:0:0.3"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="layer"
Storyboard.TargetProperty="Background.Color"
Duration="0:0:0.3"
To="{TemplateBinding Background}"/>
<DoubleAnimation Storyboard.TargetName="circle"
Storyboard.TargetProperty="(Ellipse.RenderTransform).(TranslateTransform.X)"
To="0"
Duration="0:0:0.3"/>
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Style>
ColorAnimation 부분 :
<ColorAnimation Storyboard.TargetName="layer"
Storyboard.TargetProperty="Background.Color"
To="{TemplateBinding Background}"
Duration="0:0:0.3"/>
하지만 MainWindow.xaml에서 사용자 정의 할 수 있기를 바랍니다. 따라서 색상은 일정하지 않아야합니다. 컨트롤의 배경이 변경되면 'To'속성도 변경되어야합니다. 색상을 자원으로 상수 값으로 설정하는 것은 변경할 수 없습니다. –
그러면 코드에서이 작업을 수행해야 할 것입니다. – Sameed
@AliTor 다음 동적 리소스를 사용할 수 있습니다, 여기 좋은 예입니다 : http://stackoverflow.com/questions/17502467/set-control-background-color-using-dynamic-resource-in-wpf – Sameed