WPFとVB.NET、アプリでの編集状態保存、名前を付けて保存、回転角度を指定する2つの方法 ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14093723.html
これをPixtack紫陽花2ndに組み込もうとして少し躓いたのでメモ
http://blogs.yahoo.co.jp/gogowaten/14093723.html
これをPixtack紫陽花2ndに組み込もうとして少し躓いたのでメモ
期待通りに動いているところ
デザイン画面とXAML
VBコード
コントロールの変形で使いたいのが3つあって
RotateTransform回転角度、ScaleTransform拡大率、SkewTransform傾斜角度
どれか1つなら前回の方法でよかったみたいだけど、3つ同時だとできなかった
Imageコントロールの回転角度を30に変形する場合
前回の方法
Image.RenderTransform.SetValue(RotateTransform.AngleProperty, 30.0R)
改善した?今回の方法
Dim ro As RotateTransform = GetTransform(FocusBorder.RenderTransform, GetType(RotateTransform))
ro.Angle = 30
Private Function GetTransform(tGroup As TransformGroup, tType As Type) As Transform
Dim tg As TransformGroup = tGroup
For Each c As Transform In tg.Children
If tType = c.GetType Then
Return c
Exit For
End If
Next
Return Nothing
End Function
コントロールの変形の指定方法
回転角度だけを指定、30度の場合
Image.RenderTransform = New RotateTransform(30)
拡大率縦横だけを指定、縦横2倍の場合
Image.RenderTransform = New ScaleTransform(2, 2)
どれか1つならこんなふうに1行で済むけど、組み合わせるときはTransformGroupを使って
↓
回転角度と拡大率を指定
Dim tg As New TransformGroup
tg.Children.Add(New RotateTransform(30))
tg.Children.Add(New ScaleTransform(2, 2))
Image.RenderTransform = tg
こうなる、ここまでは良かったけど
前回の方法で回転角度を45に変更
Image.RenderTransform.SetValue(RotateTransform.AngleProperty, 45.0R)
これでいいのかと思ったら、これだと無視されて変更されない
どうやらTransformGroupの中にあるRotateTransformまで届いていないみたい
そこでFor Each~NextでTransformGroupの中からRotateTransformを取得して、それに直接指定するようにしたのが今回の方法
まともな方法がありそうだけど見つからなかった
For Each~Nextを使わないで取得する
TransformGroupに入っている順番は入れた時の順番みたいなので、さっきの例だと
tg.Children.Item(0)にRotateTransformに入っていて
tg.Children.Item(1)にScaleTransformが入っている
決め打ちみたいだけどこっちのほうがラクかも
これでなんとかなった
BindingやDataContextは設定が難しいけどあとが楽になる感じ
コード
Wpf_test105_変形TransformのBinding_Datacontext - Visual Studio Team Services
https://gogowaten.visualstudio.com/DefaultCollection/WPF/_git/WPF_test6?path=%2FWpf_test105_%E5%A4%89%E5%BD%A2Transform%E3%81%AEBinding_Datacontext&version=GBmaster&_a=contents
https://gogowaten.visualstudio.com/DefaultCollection/WPF/_git/WPF_test6?path=%2FWpf_test105_%E5%A4%89%E5%BD%A2Transform%E3%81%AEBinding_Datacontext&version=GBmaster&_a=contents
Pixtack紫陽花2ndの様子
SliderのValueChangedイベントで変形させていたのを、SliderとImageをBindingするようにしただけだから、見た目も動作も変わっていないw
でもコードも減ったし動きも軽くなったかも?
次は名前を付けて保存機能
2016年5月1日追記、名前を付けて保存機能できました~
Pixtack紫陽花2nd、編集状態をファイルに保存できるようにした ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14103815.html
http://blogs.yahoo.co.jp/gogowaten/14103815.html
2017/06/19は1年後の記事
WPF、AnglePropertyと作成した依存プロパティをバインディング - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/14979329.html
https://blogs.yahoo.co.jp/gogowaten/14979329.html