WPF: StoryboardにBinding

DoubleAnimationとかでFrom, To, Durationなどを状況に応じて変更させるためにこれらにBindingを設定したいという状況は少なくないと思うのですが、ControlTemplate.TriggersやStyle.Triggers内で定義すると実行時に”Cannot freeze this Storyboard timeline tree for use across threads”なるメッセージの例外が出ます。

どうもはっきり理解できていないのですが、理由は以下のどちらかかな?
  • Animationやっている最中にFrom, To, Duration値が変えられると困る。なので少なくともStoryboard開始前にはこの値を固定(Freeze)する必要がある。値を動的に変えることが目的のBindingはこれに反する。
  • TemplateやStyleは使いまわされることが前提なので、事前(多分Exe実行初期)にXamlをコンパイルしてパフォーマンスを改善している。よってコンパイル後値が変わる要因となるBindingは認められない。

ここの例Link はStoryboardをリソース指定、開始をコードビハインドでやることで、うまく回避できているということでしょうか。Animation開始後にウィンドウサイズを変えてもボールの動きが追従しないので、Animation中は値が変えられないということがわかります。

コードビハインドで取得したリソースはDynamicResourceに相当するLink らしいので、Storyboardをリソースで指定してDynamicResourceで参照すればと試したのですが、少なくともControlTemplateではうまく行かず。

[参考]

[2013/3/18 追記] 結局プロパティの変化を捕まえて、毎回コードビハインドでStoryboardから作る方法で逃げた

Storyboard LastStoryboard;
double from, to;

void BeginHeightAnimation()
{
    if (LastStoryboard != null) LastStoryboard.Stop();

    ControlTemplate template = (ControlTemplate)GetValue(TemplateProperty);
    FrameworkElement target = (FrameworkElement)template.FindName("Target", this);
    DoubleAnimation dblAnim = new DoubleAnimation(from, to, new Duration(TimeSpan.FromMilliseconds(200)));
    Storyboard sb = new Storyboard();
    sb.Children.Add(dblAnim);
    Storyboard.SetTarget(dblAnim, target);
    Storyboard.SetTargetProperty(dblAnim, new PropertyPath(FrameworkElement.HeightProperty));

    sb.Begin();

    LastStoryboard = sb;
}

— posted by mu at 12:31 pm  

メモリ壊れた

blog20130315-BrokenSODIMM

やけにFirefoxが落ちたりBSoDが出るなと思ったら、メモリが壊れていた。何も海外で壊れなくてもと思ったけど、出張か帰省中にしか活躍しないノートだからそりゃ海外で壊れるか。

Knoppixが起動するUSBメモリとか、2枚入れてあったメモリカードとか、普段なら「無駄に良い」と言われそうな準備が役に立ち、特に困った事態にはならずに済みそう。

— posted by mu at 06:53 pm  

Lenovo A800 root化

中華フォント対策のためにLenovo A800をroot化したのでメモ。

  • ADB用ドライバはLenovoUsbDriverで検索する。バージョン1.0.1以降推奨。私はここLink から取りました(チェコ語のようです)
  • root化にはSRS One Click RootLink を使用。
    • 英語が読めると成功確率がグッと上がると思う、というか読めずにできるのだろうか?
    • root化するボタンは2つあります。私は上のボタン(全部試す)で成功。多分どっちでもいい。
    • 途中WindowsのOKボタンを押した直後にAndroidのResumeボタンを押せと出ますが、本当にすぐ押さないといけないようなので失敗したらもう一度。
  • フォントファイルの変更などはここLink の他色んな所に書いてあるのでお好きな方法で。
  • あとは好みでSuperuserとかBusyboxとか。

個人的にroot化すると、汚してしまったというか取り返しの付かないことしたような気分になる(^_^;)

[参考]

— posted by mu at 12:03 am   commentComment [0]  pingTrackBack [0]

Lenovo A800購入

blog20130311-LenovoA800

Nexus7を購入Link してから私のスマホ化が急激に進んでます。去年の今頃は「スマホ買っても使い道ないしなぁ」と言ってたような > 自分

先週から再びフィリピン出張。それまで定宿としていたホテルは室内インターネット使い放題だったのですが、今回来てみると3時間/日制限が入ってたorz で、ちょっと調べてみると携帯回線のデータ通信定額が予想外に安いLink ので代替になりそう。最初はUSB接続タイプLink を購入してWindows7にSoftAPを設定して使っていたのですが、なんかSoftAPがブツブツ切れるので安いテザリング用スマホが欲しくなってきた次第。

Dual SIM機がいいなってことでSony Xperia tipo dualLink が候補だったのですが、安いの探して店巡りしていたらLenovo A800Link を勧められて心変わり。とりあえず2日使ってみたところ…

  • バッテリーはSIM 2枚14時間待ち受け/数回メールチェック/1時間テザリングで残り75%と頼もしい限り。
  • いかんせん(^_^;) 中華パッド/スマホ。フィリピン販売なので初期設定は英語なものの、言語選択に日本語なし。ここLink 読んで気後れしていたのですが、なんてことはないGoogle Playが最初から使えるのでMoreLocation2とGoogle日本語入力を入れてあっさり解決
  • ただし日本語設定にしてもAndroid設定画面(標準の設定画面とは違うデザイン)や一部のプリインストールアプリは英語のまま
  • ストラップ通す穴がないのは意表を突かれた。中国人はストラップ使わないってことか。
  • 現在中華フォント対策にモトヤLマルベリ3等幅を入れる準備中

でかくて重いですが、コストパフォーマンスはかなりいいです。

で、パケット定額ですが、日中・夕方は40kbpsとかb-mobileの980円Link といい勝負の速度ですが、深夜になると1Mbpsを超えるようになり、夜間のぶっ通しダウンロードにかなり便利。

[2013/03/12 追記] ストラップの穴について会社の人に聞いてみたところ、中国人「珍しいな、普通ついてるんだが」 アメリカ人「今まで買った5台、どれも穴なんてなかったぞ」と予想の逆の返答でした。

[2013/03/13 追記] 日本語フォント入れるための第一歩であるADBドライバは、LenovoUsbDriverで検索。私の環境(Windows7 SP1 x64)ではバージョン1.0.1じゃないと認識してくれませんでした。私はここLink から取りましたが、何語だこのページ? 勘で乗り切りましょう(^_^)

— posted by mu at 10:51 pm  

ADSL-direct利用開始

昨日プロバイダの移行が完了し、eAccess ADSL-directLink になりました。朝9時過ぎには既に回線切り替えが終わっていたようだったのですが、出かけないといけなかったので確認したのは夜。

同じeAccessなのでモデムがそのまま使えることを期待したLink のですが、結局同じ型番(MegaBit Gear TE4571E)の新しいモデムが送付され、今まで使ったのは送り返すことに。無駄なことを…

新しいモデムは同じ型番なのですがファームウェアが変えられているようで、PPPのユーザーIDが設定済み&変更不可。ケーブルを繋ぐだけで即使える初心者に優しい仕様となっています。

他のプロバイダにモデムを転用する気はさらさらないのでそれはいいのですが、困ったのはPPPoEブリッジを使用して別のルーターを使おうとしたとき。先にADSLモデムがPPPセッションを確立してしまい、外部ルーターが接続できない。モデムにPCを繋いでPPP接続を切ると外部ルーターが接続可能になるのですが、モデムの電源を入れなおすと再びモデムがPPP接続してしまう。これは停電復帰後が面倒。

外部ルーターがDD-WRTLink 化したものだったので、PPPoEのAdvanced設定でMulti linkにチェックを入れるとこの問題は解決しました。う~む、他のブロードバンドルーターはマルチセッションが当たり前で、DD-WRTの規定値が少数派なのだろうか。

— posted by mu at 11:32 am  

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0169 sec.
prev
2024.5
next
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31