質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

1822閲覧

wpf imageコントロールと親子関係を持てるコントロールはなんですか?その他質問もあります

blendegg

総合スコア81

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2019/05/15 09:52

###質問1
imageコントロールを動的に追加したいです。rpgのタイルマップエディタ用なものを考えています。
追加する際にはchildrenメソッド?を使用するのだと思いますが、canvasはimageを子には出来ないようです。
上記の目的に適した親は何でしょうか?また、コントロールの相関関係を把握できるリファレンスはありますか?

###質問2
wpfのbegininitとendinitの目的について
winformでも内部ではこれらが使われていたということですが、wpfではこれをコード内に書かないといけないようです
初期化の開始と終了を表しているということはわかりますが、具体的にどんなことをしてるんですか?画像のurlを指定する場合はこんな感じになると思います。
var bt = new BitmapImage();
bt.BeginInit();
bt.UriSource = new Uri(@"url");
bt.EndInit();

噛み砕いた説明は出来ないでしょうか。
ただのおまじない、程度の理解しか出来ていません。

###質問3
これから新規にアプリを作成する場合は、winformよりwpfのほうがいいですか?調べた限り、メリットとして指摘されているのは拡大してもぼやけないということかと思います。これはベクター画像のイメージでしょうか。しかしwinformでも高いdpiに対応しているという記事を発見しました。
wpfのデメリットとして感じているのは、資料がやや少ないことと、winformよりは難しく感じることです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takabosoft

2019/05/16 04:57

今後、質問ごとに別記事として投稿してください。記事タイトルを見て閲覧される方もいらっしゃいますので。
guest

回答1

0

ベストアンサー

質問1

たぶんBitmapImageをそのままCanvas.Childrenに追加しようとしたんだと思いますが、
画像データであるBitmapImageクラスとそれを表示するためのUI要素であるImageクラスは別物です。

ImageクラスがBitmapImage(正確にはImageSource型)を表示するための要素ですので、
こちらをCanvasに追加してあげれば表示されます。

csharp

1 var bitmapImage = new BitmapImage(new Uri("...")); 2 var img = new Image() { Source = bitmapImage }; 3 Canvas.SetLeft(img, 10); // left 4 Canvas.SetTop(img, 10); // top 5 img.Width = 100; // width 6 img.Height = 100; // height 7 canvas.Children.Add(img);

質問2

自分はよく知りませんが、ざっと調べた感じ、一次ソースでは

プロパティの初期化はBeginInitとEndInitの呼び出しの間に行わなければなりません。 BitmapImageが初期化されると、プロパティの変更は無視されます。

としか書かれていないので、必要性については書かれていません。

具体的になにをやっているかは、.NETのソースを読んでもらえれば良いのかなと思いました。

EndInitをトリガーにして、他の様々な処理が内部で行われるようです(画像をロードしたりだとか?)。
また、BeginInitやEndInitで何が行われるかはクラスによっても異なるようです。

質問3

作成したいアプリケーションの性質によって変わってきますので、なんとも言えません。
(極端ですが例えばそれは.NETではなくMFCやWTLが正解の場合もあるかもわかりません。他にもUWPやQtが正解の場合もあるでしょう。)
各フレームワークのメリットデメリットをよく調べて選択してもらった方がよいです。

WPFはスケーリングに強かったり、何もせずとも高DPI対応(4.6.2からはモニタごとのDPIにも対応)してたりと、GUI面で多大な恩恵があるのも事実です。

投稿2019/05/16 02:52

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

blendegg

2019/05/16 07:07

なるほど そういえばビットマップのコントロールというのはないですね ありがとうございました
blendegg

2019/05/16 07:26

new Image() { Source = bitmapImage }; 質問なんですが、imageクラスのインスタンスを作るときにソースを指定していますが、波括弧部分の機能?のことをなんと呼ぶのでしょうか?
blendegg

2019/05/16 07:37

初期化子ですね すみませんでした
takabosoft

2019/05/17 08:09

解決されたのでしたら質問をクローズしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問