ページの遷移時のTransitionとしてStoryboardを使う。

Windows Phone7の話。Expression Blendで作ったStoryboardをページ遷移時に動かすためのコードを書いてみた。Windows Phone ToolkitのTransitionServiceよりも、ちょっとだけ柔軟になる。

内容:

ToolkitにあるTransitionServiceクラスを使うと、ページ遷移時にアニメーションを動かせる。Windows Phoneっぽい、画面が奥に回転するアニメーションとかを指定できる。この際に指定できるアニメーションは5種類。これだけでも、動きのあるページ遷移を作れる。が、凝った動作、たとえば、要素ごとに異なる動きをするとかは無理だ。

いっぽう、Expression BlendのStoryboardを使うとFlashの如くに凝ったアニメーションも記述できる。

そこで、TransitionServiceを使いつつExpression Blendで作ったStoryboardを指定できるクラスを書いてみた。

// see : Windows Phone Toolkit Aug 2011 in depth-v1
using System;
using System.Windows;
using System.Windows.Media.Animation;
using Microsoft.Phone.Controls;
namespace YourNamespace
{
public class StoryboardTransition : TransitionElement
{
public static readonly DependencyProperty AnimationProperty =
DependencyProperty.Register(
"Animation", typeof(Storyboard),
typeof(StoryboardTransition), null);
public Storyboard Animation
{
get
{
return (Storyboard)GetValue(AnimationProperty);
}
set
{
SetValue(AnimationProperty, value);
}
}
public override ITransition GetTransition(UIElement element) // elementにはpageが入る。
{
Storyboard storyboard = this.Animation;
if (!(element is PhoneApplicationPage))
{
Storyboard.SetTarget(storyboard, element);
}
return new Transition(element,storyboard);
}
}
}

こんな感じで、xamlを書く。Animation=”{StaticResource …}”にBlendで書いたStoryboardのx:Nameを記載すること。(TransitionService自体の使い方はここでは書かないので、テキトウに調べること)

<phone:PhoneApplicationPage
:
xmlns:local="clr-namespace:YourNamespace"
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
:
>
<toolkit:TransitionService.NavigationInTransition>
<toolkit:NavigationInTransition>
<toolkit:NavigationInTransition.Backward>
<local:StoryboardTransition
Animation="{StaticResource Storyboard1}"/>
</toolkit:NavigationInTransition.Backward>
<toolkit:NavigationInTransition.Forward>
<local:StoryboardTransition
Animation="{StaticResource Storyboard2}"/>
</toolkit:NavigationInTransition.Forward>
</toolkit:NavigationInTransition>
</toolkit:TransitionService.NavigationInTransition>
<toolkit:TransitionService.NavigationOutTransition>
<toolkit:NavigationOutTransition>
<toolkit:NavigationOutTransition.Backward>
<local:StoryboardTransition
Animation="{StaticResource Storyboard3}"/>
</toolkit:NavigationOutTransition.Backward>
<toolkit:NavigationOutTransition.Forward>
<local:StoryboardTransition
Animation="{StaticResource Storyboard4}"/>
</toolkit:NavigationOutTransition.Forward>
</toolkit:NavigationOutTransition>
</toolkit:TransitionService.NavigationOutTransition>
</phone:PhoneApplicationPage>
view raw Test.xaml hosted with ❤ by GitHub

参考文献:

参考にしたのは、Windows Phone Toolkit Aug 2011 in Depth。というか、これに書かれているtransition3クラスでうまく動かなかった所(Storyboard.SetTargetするとエラーになる)を直しただけである。

感想とか:

Blendでアニメーションを記述すると、XAMLがすっごく長くなるんだよね。これ、xaml.csファイルみたいに別のファイルに分けれないのかな。

コメント等あればTwitterかFacebookに@ください。

 

 

ergotron display arm

液晶ディスプレイを支えるためのアームを導入してみたよ。24インチのデュアルディスプレイを使っているんだけど、ディスプレイ付属の足がでかくて、これまで机の半分位が使えなくなっていたのだ。

エルゴトロンの45-248-026を選ぶ。ネットで調べるとエルゴトロンが評判よく、その中でデュアルディスプレイ用、支える軸が標準より高いものがこれ。扱っているネットショップは国内にいくつもあるんだけど、注文した店では届くまでに1週間くらいかかった。ディスプレイケーブルとか電源ケーブルとかも長いのを用意する。

設置も特に難しくもない。思ったよりも軽いし、組み立ては部品をはめ込むだけだ。なお、アームの関節の強さは気に入るまで何度か調整する必要がある。

できたのがこれである。アームの軸を自分の正面ではなく横手にずらしたこともあって、正面のディスプレイの下に何もない状態。ディスプレイが空中に浮いているみたい!

IMG 0968

そして、裏側。ロボ!

IMG 0980

机が広くなって、非常に快適になった。まあ、ディスプレイを動かす際に邪魔になるので、空いたところで物は置けないんだけど。あと拭き掃除が楽そう。

ちなみに、アームは少し固いので、たとえば人差し指で押したらツツツと動くというわけではない。ちょうど、アーム付ける前のディスプレイを両手で持ち上げるくらいの力、それで動かすと動く。持ち上げたら空中に固定される感じ。

以上!