2016-08-28 2 views
0

У меня есть цветная анимация для управления переключателем и возможность изменения цвета фона. Я хочу связать свойство родительского элемента Background с свойством ToColorAnimation. Я много пробовал, но никто не работал. Как я могу это сделать?Как связать цвет фона с свойством «To» ColorAnimation?

стиль управления Переключатель:

<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

Смежные вопросы