この Silverlight アニメーションにより、レイアウト全体が消えてしまうのはなぜですか?

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

  •  03-07-2019
  •  | 
  •  

質問

Silverlight に注目し始めており、小規模から始めたいと考えていました。これまで見てきたサンプルはすべてキーフレーム アニメーションを使用していたので、別のタイプのアニメーションを試してみたいと思いました。コードからアニメーションを実行することにも少し慣れていなかったので、これも試してみることにしました。私の最終的な目標は、ある種のアニメーションパネルを作成することですが、今のところはボタン 1 つだけから小さなことから始めています。

<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>

私はこのイベント ハンドラーを作成しましたが、これは非常に簡単だと思います。

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();
}

ボタンをクリックすると、ボタンが右に 50 単位スライドすることが 3 回表示されることが期待されます。実際に起こることは、背景色とボタンが消えるように、レイアウト全体が消えることです。

ボタンのコードを RenderTransform で開始するように書き直すと、すべてが機能します。

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

失敗の原因となる最初のケースでは何が起こっているのでしょうか?私は何か根本的に間違ったことをしているのでしょうか?

役に立ちましたか?

解決

&quot; btnClick.RenderTransform == null&quot;のチェックを削除することで問題を修正し、代わりに常に新しいTranslateTransformを作成するか、&quot; btnClick.RenderTransformがTranslateTransform&quot;であることを確認できます。 nullの代わりに。

このエラーが表示される理由は、デフォルトでButtonにRenderTransformのアイデンティティ変換があり、これはたまたまMatrixTransformであるためです。したがって、MatrixTransformをTranslateTransformのようにアニメーション化しようとしています。

他のヒント

Silverlightを使用した最後の時間は2008年以前でした。Silverlightのベータ版では、エラーメッセージではなく any エラーが発生すると、レイアウト全体が消えることがありました(白と空のまま)。 / p>

これが現在のバージョンでも当てはまるかどうかはわかりません。コードをステップ実行して例外がスローされているかどうかを確認できますか...またはプログラムでキャッチして何らかのエラーメッセージを表示できますか?

少しお役に立てれば幸いです。

マティアス

私もほぼ同じことを調べていましたが、私が読んださまざまな情報源によると、プログラムでストーリーボードを追加できないことが示唆されています。XAML に追加してみて、コード内で変更できます。アクセスできるように必ず名前を付けてください。xaml にも変換を追加する必要がある場合があります。Silverlight は wpf ではないということを覚えておく必要があります。それに近いものですが、多くの点が異なります。ただ面倒なだけです。

<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>

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top