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