tmytのらくがき

個人の日記レベルです

Silverlight toolkit for WP7 の TiltEffect は一部のコントロールにしか適用できない

WP7のホームスクリーンのタイルとかをつついたとき、うにょーんと傾くあれがSilverlight ToolkitのTiltEffectとして公開されています。お手軽な感じでWP7の標準UIにマッチしたUIを作れてとても便利です。
ちなみに使い方はこんな感じ。

<phone:PhoneApplicationPage 
    x:Class="Sample.Sample"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
    toolkit:TiltEffect.IsTiltEnabled="True">
</phone:PhoneApplicationPage>

ルート要素にtoolkit:TiltEffect.IsTiltEnabledを追加するだけ。とてもらくちんです。

さてこのTiltEffectですが、すべてのコントロールで利用可能なのか。というとそうではありません。具体的に何に適用されるか、といいますと、次通りです。

  • ButtonBase
  • ListBoxItem

たったこの2個だけです。ButtonBaseはあらゆるボタン型コントロールのベースコントロールなので、ここから派生しているコントロールすべてに対して適用されます。つまり以下のコントロールなどが対象になります。

  • Button
  • HyperlinkButton
  • CheckBox
  • RadioButton
  • etc..

ListBoxItemにおいても同様に、ListBoxItemだけでなくComboBoxItemにも適用されます。

というわけで、適用されるコントロールは上の2個だけなので、それ以外のコントロール、たとえばSilverlight Toolkitに含まれるListPickerなどには適用されません。システムの設定画面などではTiltEffectが利用されているのでそのうちSilverlight Toolkitのアップデートで対応されるかもしれません・・?

ちなみにですが、TiltEffectを適用するコントロールはSilverlight Toolkit内のTiltEffec.cs内で定義されています。

// Change Set 61620 での場合です。
// Line: 119
            // The tiltable items list.
            TiltableItems = new List<Type>() 
            { 
                typeof(ButtonBase), 
                typeof(ListBoxItem), 
            };

ここに任意の型を追加してSilverlight Toolkitをリビルドしてあげれば、任意の型にたいしてTiltEffectを適用することもできます。ですが、たとえばListPickerなどはキャプションもコントロール内に含んでいるのでキャプションごとTiltして微妙な気分になったりするので、標準のままのほうがいいのではとも思います。