2008年6月17日


今日の Silverlight

DeepZoom のサンプルをこねくり回している日々。画像を Canvas の外に出ないようにしようと思っているが、うまく制御できない。

Page.xaml.cs ファイルの MouseMove にアタッチされているイベントのプロパティが何を意味しているのがよくわからない。

以下が画像の位置を決めているプロパティ

newOrigin.X = currentPosition.X - (((e.GetPosition(msi).X - dragOffset.X) / msi.ActualWidth) * msi.ViewportWidth);
newOrigin.Y = currentPosition.Y - (((e.GetPosition(msi).Y - dragOffset.Y) / msi.ActualHeight) * msi.ViewportWidth);

それぞれを試しに吐き出してみると

currentPosition.X = -0.39350089430809
e.GetPosition(msi).X = 381
dragOffset.X = 368
msi.ActualWidth = 1313
msi.ViewportWidth = 3.33333349227905

みたいな感じ。

e.GetPosition(msi).X は画像の左上端の座標
dragOffset.X はマウスでドラッグした最後の位置
msi.ActualWidth は MultiScaleImage の幅

というのはすぐにわかるのだが、currentPosition.X と msi.ViewportWidth の値が意味不明。

とりあえず以下の設定で X軸に関しては Canvas の外に出ないようにできた。

if (newOrigin.X > 0)
{
    newOrigin.X = 0;
}
else if ((msi.ViewportWidth + newOrigin.X) < 1)
{
    newOrigin.X = (1 - msi.ViewportWidth);
}

Y軸も上辺に関しては以下のコードで対応できた。

if (newOrigin.Y > 0)
{
    newOrigin.Y = 0;
}

が下辺が全然わからない。

msi.ViewportHeight の値を取りたいところだが、なぜかエラーになってしまって取れない。

そもそも MultiScaleImage に関する情報が全然ない。画像のサイズかと思いきや Canvas の値が取れてしまう。うーん、要試行錯誤。

β1 ではマウスホイールのイベントに関しては別途実装する必要があったんだけど、β2 からはデフォルトで対応した。

ズームに関しては以下の関数をいじればおk。

 public void Zoom(double zoom, Point pointToZoom)

最初の引数が倍率、2番目の引数がズームが始まる座標みたい。2番目の座標には point(0, 0) を入れておくと、挙動がわかりやすい。


MS の人による Expression Studio 2.0 の概略の説明が出てた
【レポート】Microsoft製デザインツール「Expression Studio 2」の特徴と新機能 (2) RIA/Webのオーサリングをビジュアルに | エンタープライズ | マイコミジャーナル


トラックバック

この記事のトラックバックURL
http://enokido.net/mt/mt-tb.cgi/2026

管理人:えのきど。
職業:Web Design Engineer
(Designer+Programmer) / 2

Designer にも Programmer にも成りきれず、どっちつかずでふらふらしてます。先は見えてません。

生存証明用の日々のメモブログ。メインは雪山大好きっ娘。です。

このブログの RSS RSS
counter