Warum funktioniert die Silverlight-Animation des gesamte Layout verschwinden zu lassen?

StackOverflow https://stackoverflow.com/questions/619369

  •  03-07-2019
  •  | 
  •  

Frage

Ich fange einen Blick auf Silverlight zu haben, und ich wollte, klein beginnen. Alle Beispiele würde ich auf gebrauchten Keyframe-Animationen sieht, so wollte ich eine andere Art von Animation versuchen. Ich war auch etwas ungewohnt mit Animationen von Code durchführen, so habe ich mich entschlossen, dies auch zu probieren. Mein Ziel ist eine Art animierte Platte zu machen, aber jetzt fange ich klein mit nur einer Taste:

<UserControl x:Class="TestSilverlight.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300" Background="Azure">
    <Grid x:Name="LayoutRoot" Background="Azure">
        <Button x:Name="btnClick" Content="Animate me!" Height="48" Width="96" Click="btn_Click">
        </Button>
    </Grid>
</UserControl>

Ich schrieb diese Event-Handler, die ich war thoguth ziemlich einfach:

private void btn_Click(object sender, EventArgs e)
{
    Storyboard story = new Storyboard();
    story.RepeatBehavior = new RepeatBehavior(3.0);
    story.Duration = new Duration(TimeSpan.FromSeconds(1.0));

    if (btnClick.RenderTransform == null)
        btnClick.RenderTransform = new TranslateTransform();

    DoubleAnimation xAnim = new DoubleAnimation();
    xAnim.To = 50;
    Storyboard.SetTargetProperty(xAnim, new PropertyPath(TranslateTransform.XProperty));
    Storyboard.SetTarget(xAnim, btnClick.RenderTransform);

    story.Children.Add(xAnim);

    story.Begin();
}

Was ich erwarte, wenn ich auf die Schaltfläche klicken ist es auf der rechten Seite 50 Einheiten 3 Mal gleiten zu sehen. Was tatsächlich passiert ist, das gesamte Layout verschwindet, wie es in der Hintergrundfarbe zusammen mit der Taste verschwindet.

Wenn ich den Code neu schreiben für die Schaltfläche mit einem Render zu starten, funktioniert alles!

<Button x:Name="btnClick" Content="Animate me!" Height="48" Width="96" Click="btn_Click">
    <Button.RenderTransform>
        <TranslateTransform />
    </Button.RenderTransform>
</Button>

Was passiert im ersten Fall, der den Fehler verursacht? Bin ich etwas grundlegend falsch?

War es hilfreich?

Lösung

Sie können das Problem beheben, indem Sie die Prüfung für „btnClick.RenderTransform == null“ zu entfernen und stattdessen immer eine neue Translatetransform erstellen oder prüfen „btnClick.RenderTransform ist Translatetransform“ anstelle von null.

Der Grund, warum Sie diesen Fehler sehen, ist, dass standardmäßig die Schaltfläche, um eine Identität Transformation für seine Render hat, die eine Matrixtrans sein geschieht. So können Sie versuchen, eine Matrixtrans zu animieren, als ob es sich um eine Translatetransform waren.

Andere Tipps

ich das letzte Mal mit Silverlight arbeitete in früheren war 2008 Beta-Versionen von Silverlight manchmal das gesamte Layout einfach verschwunden (blieb weiß und leer), wenn jeder Fehler aufgetreten, statt einer Fehlermeldung.

Nicht sicher, ob dies noch der Fall in der aktuellen Versionen ist. Können Sie (oder Sie bereits haben) Schritt durch den Code, wenn eine Ausnahme zu überprüfen, wird geworfen ... oder es programmatisch zu fangen und eine Art von Fehlermeldung machen?

hoffe ich konnte dir ein wenig helfen.

Matthias

Ich habe mich in so ziemlich die gleiche Sache, und verschiedene Quellen, die ich gelesen habe, deuten darauf hin, dass Sie nicht storyboards hinzufügen programmatisch können. Versuchen Sie es in der XAML Hinzufügen, dann könnte man es im Code mod --- nur sicherstellen, dass es zu nennen, so dass Sie darauf zugreifen können. Sie müssen möglicherweise die auch in der XAML-Transformation hinzuzufügen. Die Sache, die Silverlight zu erinnern, ist nicht wpf, es ist in der Nähe, aber viele Dinge sind anders -. Gerade genug, um ein Schmerz zu sein

<UserControl x:Class="TestSilverlight.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300" Background="Azure">
    <UserControl.Resources>
        <StoryBoard Name="story" />
    </UserControl.Resources>

<Grid x:Name="LayoutRoot" Background="Azure">
    <Button x:Name="btnClick" Content="Animate me!" Height="48" Width="96" Click="btn_Click">
    </Button>
</Grid>

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top