C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: WPF でラバーバンド


(過去ログ 87 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■51685 / inTopicNo.1)  WPF でラバーバンド
  
□投稿者/ 雲 (16回)-(2010/07/14(Wed) 06:56:28)

分類:[.NET 全般] 

表題の通り、WPF でラバーバンドを作成しようとして、立ち止まってしまいました。
ラバーバンドのユーザーコントロールを、Canvas上にRectangleを置いて作成してみたのですが、
ラバーバンドを拡大した時に、微妙な感じになりました。

今、作成しているラバーバンドは、ラバーバンドの四隅に小さな正方形を置いてあります。
(ラバーバンドの拡大・縮小をする時にマウスで選択しやすいように)

ここで、ラバーバンドを ScaleTransform で拡大すると、ラバーバンドだけでなく、
ラバーバンドの線と四隅に置いた正方形も(当然)同じように拡大されます。

個人的には、ラバーバンドの領域だけ拡大して、ラバーバンドの線の太さとか四隅の四角形のサイズ
は変わらないようにしたいのですが、そういう場合はどうするのが良いのでしょう?

安直に思いつくのは、DrawingContext を使うというのですが、そうすると、マウスイベントをどうやって
取得するのか?といったところが良くわからずに悩んでしまいます。

何か良いアイデアがありましたら、よろしくお願いします。

引用返信 編集キー/
■51694 / inTopicNo.2)  Re[1]: WPF でラバーバンド
□投稿者/ よねKEN (541回)-(2010/07/14(Wed) 13:29:28)
よねKEN さんの Web サイト
No51685 (雲 さん) に返信
> 表題の通り、WPF でラバーバンドを作成しようとして、立ち止まってしまいました。

Adornerクラス、AdornerLayerクラスを調べてみてください。
ラバーバンドのような本来のオブジェクトを装飾する目的で使うためのものです。




引用返信 編集キー/
■51713 / inTopicNo.3)  Re[2]: WPF でラバーバンド
□投稿者/ 雲 (17回)-(2010/07/14(Wed) 20:21:35)
No51694 (よねKEN さん) に返信
> Adornerクラス、AdornerLayerクラスを調べてみてください。
> ラバーバンドのような本来のオブジェクトを装飾する目的で使うためのものです。

なるほど。確かに、装飾することができました。

ただ、ScaleTransform で拡大すると装飾した結果も含めて拡大されてしまいました。

選択領域のみ拡大して、装飾した結果はサイズをそのまま?というようにするのには、どうすればいいのだろう。。。

悩みます。
引用返信 編集キー/
■51730 / inTopicNo.4)  Re[3]: WPF でラバーバンド
□投稿者/ よねKEN (543回)-(2010/07/15(Thu) 09:54:20)
よねKEN さんの Web サイト
> ただ、ScaleTransform で拡大すると装飾した結果も含めて拡大されてしまいました。

何を「ScaleTransform」で拡大したのですか?「装飾した結果」とは?
よく理解できていないのではずしているかもしれませんが、ラバーバンドの矩形を大きくするために、
ラバーバンドに対してScaleTransformを使って拡大した、ということでしょうか?

もしそうなら、ScaleTransformではなく、
単純に大きくしたいオブジェクトのWidth、Heightだけを大きくすればいいのでは?

引用返信 編集キー/
■51751 / inTopicNo.5)  Re[4]: WPF でラバーバンド
□投稿者/ 雲 (18回)-(2010/07/15(Thu) 21:11:39)
No51730 (よねKEN さん) に返信
> 何を「ScaleTransform」で拡大したのですか?「装飾した結果」とは?
> よく理解できていないのではずしているかもしれませんが、ラバーバンドの矩形を大きくするために、
> ラバーバンドに対してScaleTransformを使って拡大した、ということでしょうか?

済みません。書き方が良くなかったですが、このラバーバンドは、画像を選択するために使う予定です。

Canvas 上に画像を表示しておいて、その画像を選択するためのラバーバンドを画像上に描画するところ
までは問題ないのですが、選択した状態で画像を拡大することを考えています。

素直に画像を拡大するためには、単純に、ScaleTransform を使えば良いのですが、その場合、画像の上に
乗っているラバーバンドも(当然)拡大されます。

拡大されること自体は全く問題ないのですが、問題は、ラバーバンドの枠線も一緒に拡大されてしまいます。
(ラバーバンドの角に置いておいた、■の形についても拡大されてしまいます)

これを避けるための方法が思いつかなくて悩んでいるのが現状です。
引用返信 編集キー/
■51752 / inTopicNo.6)  Re[5]: WPF でラバーバンド
□投稿者/ よねKEN (545回)-(2010/07/16(Fri) 00:15:53)
よねKEN さんの Web サイト
No51751 (雲 さん) に返信
> 素直に画像を拡大するためには、単純に、ScaleTransform を使えば良いのですが、その場合、画像の上に
> 乗っているラバーバンドも(当然)拡大されます。

ラバーバンドは装飾層にあるので、装飾対象のオブジェクトを拡大したからといって、勝手に拡大されないでしょう、
と思ったのですが、試してみるとたしかに装飾層のオブジェクトも装飾対象のオブジェクトに対するScaleTransformの変換の影響受けますね。

> 拡大されること自体は全く問題ないのですが、問題は、ラバーバンドの枠線も一緒に拡大されてしまいます。
> (ラバーバンドの角に置いておいた、■の形についても拡大されてしまいます)
>
> これを避けるための方法が思いつかなくて悩んでいるのが現状です。

その点については、「もしそうなら、ScaleTransformではなく、
単純に大きくしたいオブジェクトのWidth、Heightだけを大きくすればいいのでは?」
とコメントしていますが、この方法では何か都合が悪いのでしょうか?

CanvasにImageを配置してAdornerクラスを継承したResizeAdornerクラスを自作して適当に拡大するための適当なコード
(リサイズのドラッグ&ドロップの動作時の移動量をもとにImageオブジェクトのWidthとHeightを設定する)
を書いて試しましたが、うまく行きましたよ。

引用返信 編集キー/
■51758 / inTopicNo.7)  Re[6]: WPF でラバーバンド
□投稿者/ 雲 (19回)-(2010/07/16(Fri) 16:58:16)
No51752 (よねKEN さん) に返信
> その点については、「もしそうなら、ScaleTransformではなく、
> 単純に大きくしたいオブジェクトのWidth、Heightだけを大きくすればいいのでは?」
> とコメントしていますが、この方法では何か都合が悪いのでしょうか?
>
> CanvasにImageを配置してAdornerクラスを継承したResizeAdornerクラスを自作して適当に拡大するための適当なコード
> (リサイズのドラッグ&ドロップの動作時の移動量をもとにImageオブジェクトのWidthとHeightを設定する)
> を書いて試しましたが、うまく行きましたよ。

納得です。画像を拡大する時には、ScaleTransformを使わないといけないと誤解をしていました。あと、拡大した時にスクロール
の位置を合わせするために、ScrollToVerticalOffset などを使って位置の調整をするようにしたら、何となくうまくいった
気がします。

ScrollToVerticalOffset
http://www5.pf-x.net/~mikeo410x/index.php/~GraphicZooming


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -