さてさて 謎のConverter
#wpdev_jp #wp8jp
さて、この Converter は何?
まずは Converter のソースから。
public class Converter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
string language)
{
return ((double)value + 90.0);
}
public object ConvertBack(object value, Type targetType, object parameter,
string language)
{
throw new NotImplementedException();
}
}
見るとわかりますが、入力値に90を足して出力するだけの Coverter です。Converter なのでデータバインドのために使います。では何に使うのか?
... ちなみに、それぞれの関数の最後が string language となっていますがこれはWinRT用。WP用は CultureInfo ですね。
では、私がやりたかったことを。
厚みのある四角を回転させたい
オブジェクトの変換の中のProjection を使えば、X,Y,Z 各軸を中心とした疑似3次元の回転を行うことができます。しかし、この際奥行きがないんです。なので回しても立体感がない
そこで、面の端にもう一枚四角を配置することにした。横の面である。前面に対して90°回転させた状態で配置する。ここでは分かりやすいように 75°くらいにしておく。
これで全体をGridでグループ化して回してみよう。
なんかよさげ... あれ?回転が進むにつれて鋭角に。... そう、3つの絵の細い四角の角度は変わっていない。(たとえばスクリーンを基準にして)全体が回転しても、細い四角の角度はスクリーンに対して変わってないのだ。
図にして上から見るとこんな感じ。自然に角度を変えるには、全体の回転角+90°としなければならない。
そう、常に変化に対して値を変えて反映する。データバインドを使えばいい。しかし入力値に90°を足さないといけない。だから Converter である。
ということで先ほどは固定値にした75°(ほんとは90°)のところを全体のパネルの Projection RotateY と紐づける。その際に Converter 喪設定する。
こんな感じでさっきよりも自然に傾いているが、それも30°くらいまで。それ以上行くとなぜかおかしい。90°近くではほぼ平面になってる。
多分この辺は Grid の回転時の描画と、Perspective 3Dの描画方法によるものではないかと勝手にあきらめた。まぁ、±30度くらいは使えるので何かに使うこともあるかと。
Converter や Behavior(WinRTにはないが) を使って、コードレスのUI拡張をしていきましょうね。