読者です 読者をやめる 読者になる 読者になる

亀岡的プログラマ日記

京都のベッドタウン、亀岡よりだらだらとお送りいたします。

Blend3で簡単にアプリが落ちるアニメーションが書ける件

WPF Blend

Blendをさわっていたら鬼のように「Cannot animate '...' on an immutable object instance.」がでてしまい落ちまくってorzしていたのですが。どうもBlend3に問題がある気がする・・・

#というかこれはバージョンアップで対策されている??情報もってる方教えてください。
#ちなみにBlend4でも普通に落ちる。。。

まずは上記記事。
Writing a design time experience for a Silverlight control - Unni's Blog - Site Home - MSDN Blogs
これはバインディングされている要素をXAML上で強引にアニメーションさせようとすると,「Cannot animate '...' on an immutable object instance.」が出るので注意しようね,という話。

・・・んでですね。
上記動作はBlendでは不可能なのですよ。バインドされているプロパティにアニメーションを設定すると勝手に解除されるので(それはそれでわひぃという感じですが。この仕様で苦労して設定したグラデーションが割と残念なことに)。
まあFailSafeだし,まあよしとしよう。

問題は,暗黙に親要素から受け継ぐプロパティをアニメーションさせようとしたとき。
たとえば,

<Window Foreground="Black">
    <Grid>
        <TextBlock />
    </Grid>
</Window>

こんな単純なXAML(細かいネームスペース指定とかは省いてます)を置いて、TextBlockのForegroundをアニメーションさせると、落ちます。
なんで落ちるかというと、恐らくForegroundが上位親から受け継がれてきて、それをアニメーションさせるときに、Bindingとおんなじような問題が起こっているから。

んで、こいつの問題はBlendでいとも簡単にできてしまうということ。
デザイナさんにとっては多分訳が分からないというバグになっちゃうんだろーなーと。

Connectに登録すべきか。。。でもBlendのConnectってあったっけ?