Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

今更ながらWPFに置き換えてみる(3)

BitmapをImageにセットする

エクスパンダコントロールはいまいちよくわからないのでVBでの実装と同じように自力でセッティングの画像をクリックしたら下に設定項目を表示することにする。
ちっこい▼のICONをプロジェクトに組み込んでBITMAP化し、Imageコントロールに表示する。
単純にTOBITMAP()でセットはできないようなのでBITMAP化した後でハンドルを取得して、ハンドル経由で取得する。

System.Drawing.Icon ico = Properties.Resources.ctl_close1;
System.Drawing.Bitmap bitmap = ico.ToBitmap();
IntPtr hbitmap = bitmap.GetHbitmap();
this.image1.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hbitmap, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

コントロール記述の順番の重要度

あと軽くはまったのがデザイナ上でオブジェクトをツリー形式で登録する場合の順番。
先に登録しているコントロールのイベントで、後述のコントロールのプロパティを変更しようとするとエラーになる。

スライダの値を表示させるラベルオブジェクトをデザイナ上でスライダの後に記述すると、スライダのChange Valueイベントに記述しているラベルのCONTENTへの代入で
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」が出てしまう。
下のようにラベルをスライダの前に移動することでエラーは解消。

デザイナ.png

当たり前といえば当たりまえなのだが、デザイナに慣れてしまっているとコントロール記述の順番とかほとんど意識しないのでやってしまいがち。

デザイナ上で何となくスタックパネル使って設定部のON/OFFしようとおもってた。でOFFの場合は下のパネルのTOP切り替えればいいかなくらいに考えてたのだが、TOPとかそういうプロパティはないんですね。

追記

上記でコントロール記述順番を入れ替えれ云々言ってますが、XAML上で変わらなかったら意味がないですね。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away