4

Ich baue ein benutzerdefiniertes Steuerelement in Silverlight und ich möchte eines der Felder auf den Wert einer DependencyProperty animieren, wenn diese Eigenschaft geändert wird. Genauer gesagt, habe ich ein bestimmtes Element in meiner Steuerungsvorlage, das ich in die Farbe des Hintergrunds animieren möchte, wenn der Hintergrund die Farbe ändert. Also, was ich habe, ist:Ist es möglich, TemplateBinding in Silverblight in einem Storyboard zu verwenden?

<ControlTemplate TargetType="local:MyType"> 
       <Grid x:Name="PART_RootElement"> 
        <Grid.Resources> 
         <Storyboard x:Name="PART_FillAnimation"> 
          <ColorAnimationUsingKeyFrames 
           BeginTime="00:00:00" 
           Storyboard.TargetName="PART_MainPath" 
          Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"> 
           <EasingColorKeyFrame 
            x:Name="PATH_FillKeyframe" 
            KeyTime="00:00:01" 
            Value="{TemplateBinding Background}"/> 
          </ColorAnimationUsingKeyFrames> 
         </Storyboard> 
        </Grid.Resources> 
        <!-- the rest of the template --> 

Ich bin Auslösung die Animation in dem benutzerdefinierten Steuercode, aber wenn die Animation beginnt, sieht es nicht wie der Wert zu aktualisieren ist. Ich habe mich nur gefragt, ob ich etwas vermisse oder ob es überhaupt möglich ist, TemplateBinding auf Ressourcen in meinem ControlTemplate anzuwenden.

(Ich bin derzeit eine Behelfslösung von manuell über die Zuordnung der Hintergrund der EasingColorKeyFrame Wert, aber die Template Lösung wäre so viel sauberer.)

Antwort

0

Werfen Sie einen Blick auf Expression Blend Samples als mögliche Lösung zu deinem Problem. Es gibt eine Reihe von Interaktivitätsklassen, die Sie in Ihrer ControlTemplate verwenden können, um den gewünschten Effekt zu erzielen. Die Dokumentation ist nicht großartig, aber die Beschreibungen im Objektbrowser sollten Ihnen einige weitere Hinweise geben :)

Zum Beispiel habe ich eine ListBox ItemTemplate, die eine ControlStoryboardAction Verhalten enthält. Der Auslöser für dieses Verhalten ist ein DataTrigger, der ausgelöst wird, wenn ein DataContext-Feld einen bestimmten Wert enthält. (In meinem Fall, wenn Severity == "High") Der Auslöser dann spielt ein Storyboard innerhalb der ItemTemplate.

<i:Interaction.Triggers>         
<is:DataTrigger Binding="{Binding Severity, Mode=OneWay}" Value="High"> 
    <im:ControlStoryboardAction Storyboard="{StaticResource flashLight}" IsEnabled="True" /> 
</is:DataTrigger> 

Die folgenden Namespaces verwiesen:

  1. <i: - System.Windows.Interactivity
  2. <is: - Expression.Samples.Interactivity (verfügbar über den Link oben Ich verwende. die Juli 2009 Freigabe für SL3)
  3. <im: - Microsoft.Expression.Interactivity.Med ia
Verwandte Themen