2011-01-04 4 views
2

Ich habe Blend geladen und Rechteck # 1 ausgewählt (es gibt 6) und erstellt ein einfaches Fade-Out-Storyboard.Wie blende ich ein bestimmtes Rectangle-Objekt in XAML aus? (Ohne zu wissen, welches es sein wird)

Wie kann ich das Storyboard problemlos programmgesteuert auf andere Rechtecke anwenden?

Ich hatte gehofft, ich einfach so etwas wie

Storyboard.TargetNameProperty = this.rect2;

und führen Sie das Drehbuch sagen könnte und das wäre fade out Rechteck # 2, aber

Fehler 2 kann nicht implizit Typ ‚System umwandeln .Windows.Shapes.Rectangle 'zu ' System.Windows.DependencyProperty 'C: _Code \ WP7_SL_WStest \ wp7wstest \ Views \ GameTimer.xaml.cs 63 49 wp7wstest

Meine XAML

<phone:PhoneApplicationPage.Resources> 
    <Storyboard x:Name="StoryboardFadeOut"> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="rect1"> 
      <EasingDoubleKeyFrame KeyTime="0" Value="1"/> 
      <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0"/> 
     </DoubleAnimationUsingKeyFrames> 
    </Storyboard> 
</phone:PhoneApplicationPage.Resources> 
+0

danke funktioniert super !! aber was, wenn ich ZWEI Objekt habe, möchte ich die Storyboard-Animation ausführen? tut dies nicht funktioniert .. eine einfache Möglichkeit, eine andere Instanz zur gleichen Zeit zu handeln? – punkouter

+0

Storyboard StoryboardFadeOut = this.FindName ("StoryboardFadeOut") als Storyboard; Storyboard.SetTarget (StoryboardFadeOut, rect2 als DependencyObject); Storyboard.SetTarget (StoryboardFadeOut, rect4 als DependencyObject); StoryboardFadeOut.Begin(); – punkouter

Antwort

1

Sie finden das angebaute Property Storyboard.SetTargetName verwenden. Beispiel

<Rectangle Name="rect1" IsHitTestVisible="True" Fill="Green" 
      MouseEnter="rect_MouseEnter" 
      MouseLeave="rect_MouseLeave"/> 
<Rectangle Name="rect2" IsHitTestVisible="True" Fill="Red" 
      MouseEnter="rect_MouseEnter" 
      MouseLeave="rect_MouseLeave"/> 

-Code hinter

private void rect_MouseEnter(object sender, MouseEventArgs e) 
{ 
    Rectangle clickedRectangle = sender as Rectangle; 
    Storyboard StoryboardFadeOut = this.FindName("StoryboardFadeOut") as Storyboard; 
    Storyboard.SetTargetName(StoryboardFadeOut, clickedRectangle.Name); 
    StoryboardFadeOut.Begin(); 
} 
private void rect_MouseLeave(object sender, MouseEventArgs e) 
{ 
    Storyboard StoryboardFadeOut = this.FindName("StoryboardFadeOut") as Storyboard; 
    StoryboardFadeOut.Stop(); 
} 

aktualisieren

Wie decyclone wies darauf hin, ist es besser setTarget stattdessen zu verwenden, wenn wir einen direkten Zugang zum Ziel haben. Die aktualisierte MouseEnter-Methode würde so aussehen:

private void rect_MouseEnter(object sender, MouseEventArgs e) 
{ 
    Storyboard StoryboardFadeOut = this.FindName("StoryboardFadeOut") as Storyboard; 
    Storyboard.SetTarget(StoryboardFadeOut, sender as DependencyObject); 
    StoryboardFadeOut.Begin(); 
} 
+1

Ich würde 'Storyboard.SetTarget() 'stattdessen empfehlen, wenn Sie direkten Bezug auf Zielelement haben. – decyclone

+0

@decyclone: ​​Du hast absolut recht! Aktualisierung meiner Antwort –

Verwandte Themen