WPFにもNumericUpDownみたいなのをユーザーコントロールで、その3
昨日の続き
- decimal型の依存関係プロパティ(名前:MyValue)を追加
- RepeatButtonクリックでMyValueに+1、-1
を追加した
UserControl1.xaml.cs
クラスの名前をUserControlからNumericUpDownに変更した
右クリックメニューの名前の変更から変更
これで動作確認用アプリのMainWindow.xamlに書いたUserControl1も、自動で書き換えられたはずだと、このときは思っていたんだけどそうじゃなかった
依存関係プロパティをコードスニペットを使って追加
propdpとタイプしてTabキーで
これだけ自動で入力される、この楽ちんな方法は最近知った
あとは必要なところを書き換えるだけで、それもTabキーを押していくと順番に選択される
型:decimal
名前:MyValue
ownerclass:NumericUpDown(自分)
PropertyMetadata(既定値の設定):0m(decimal型の0)
あとは必要ないけど、128行目のコメントは要らないのと、130行目の文字列で指定している"MyValue"が気になるのでnameof()で取るようにして
こうした
これでMyValueって名前の、decimal型で既定値0mの依存関係プロパティできたので、これをTextBoxのTextプロパティにBindingする
UserControl1.xaml
TextBoxのTextプロパティにMyValueをBinding
追加したのは43と44行目、これでいいんだけど44行目のAncestorTypeの指定は少し端折って
これでも動いた
TextプロパティにBindingするソースはNumericUpDownで、これはここに配置したTextBoxの親(祖先:Ancestor)に当たるので、
FindAncestorやAncestorTypeってのを使っているみたい
あと気になるのは、Textプロパティの型はStringなのに、decimal型のMyValueをBindingしているところ、本当ならコンバーターが要ると思うんだけど、なんかうまいこと処理してくれてるみたい
これでUserControlの方はできたのでビルドしてから、次は動作確認用アプリのほう
MainWindow.xaml
デザインが表示されていなくて、エラーを表す波線がついている(14と15行目)。ビルドしてくださいってあるのでビルドしたら
ビルド失敗
どうやらUserControl1の名前をNumericUpDownに変更したのが、こっちでは反映されていなくてエラーになっているみたい
確かに古い名前のままになていたので、NumericUpDownに書き直す
まだ表示されないのでビルド
ようやく表示された、既定値の0も表示されている
MyValueに値を指定
入力候補に出てくる
MyValueに5を指定したら、デザインの方でも表示が反映された
SliderのValueとBinding
NumericUpDownにnumeって名前つけて、これをSliderにBinding
デバッグ開始
期待通り連動している
RepeatButtonで値を変更できるようにする
UserControl.xamlに戻って
RepeatButtonのクリックイベントに新しいイベントハンドラーを追加、っていうのかな、ここまでタイプしてTabキー押すと
適当な名前が入るので、それにカーソルを合わせてF12キーを押せば、そのメソッドにジャンプする
138行目に飛んできた、楽ちん
MyValueに1足す
同じようにもう一つのRepeatButtonのクリックでは1引くようにして完成
必要ないけど
メソッド名変更
それぞれUpとDownと付けて変更完了、XAMLの方は?
連動して変更されていた、こんなふうに自動で変更されるから、UserControlのクラス名を変更したときも全部自動で書き換わるのかと期待していたんだよねえ、別プロジェクトだと書き換わらないとかかなあ
これでできたのでビルドしてからデバッグ開始
クリックで1ずつ変更できるようになってNumericUpDownっぽくなった
今回はここまでで、あと残っているのが変更値の設定、下限上限の設定が必須で、数値の書式設定
ファイル名のUserControl1ってのもNumericUpDownに変更したい
関連記事
次回は明日
gogowaten.hatenablog.com
前回は昨日
gogowaten.hatenablog.com