2016-08-28 5 views
0

스위치 컨트롤에 대한 컬러 애니메이션이 있고 배경색을 변경 가능하게하는 경우 부모 컨트롤의 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"/> 

답변

0
당신은이 오류가 발생합니다한다면, 컬러 애니메이션에서 바인딩을 사용하지 않을 수

" 스레드간에 사용하기 위해이 스토리 보드 타임 라인 트리를 고정 할 수 없습니다. ", 자세한 내용은 여기 : WPF Animation "Cannot freeze this Storyboard timeline tree for use across threads". 당신이 주변에있는 방법을 원하는 경우

지금, 당신이 할 수있는 것은이 같은 부모 컨트롤의 배경색을 나타내는 정적 리소스를 만들 수 있습니다 :

<Color A="255" 
      R="100" 
      G="0" 
      B="0" 
      x:Key="resource" /> 

을 그리고 당신은 당신의 색깔이 자원을 할당 할 수 있습니다 애니메이션 속성은 다음과 같습니다 :

<ColorAnimation Storyboard.TargetName="layer" 
                 Storyboard.TargetProperty="Background.Color" 
                 Duration="0:0:0.3" 
                 To="{StaticResource ResourceKey=resource }" /> 

희망이 있습니다.

+0

하지만 MainWindow.xaml에서 사용자 정의 할 수 있기를 바랍니다. 따라서 색상은 일정하지 않아야합니다. 컨트롤의 배경이 변경되면 'To'속성도 변경되어야합니다. 색상을 자원으로 상수 값으로 설정하는 것은 변경할 수 없습니다. –

+0

그러면 코드에서이 작업을 수행해야 할 것입니다. – Sameed

+0

@AliTor 다음 동적 리소스를 사용할 수 있습니다, 여기 좋은 예입니다 : http://stackoverflow.com/questions/17502467/set-control-background-color-using-dynamic-resource-in-wpf – Sameed

관련 문제