WPFにもNumericUpDownみたいなのをユーザーコントロールで、その7
ControlLibraryCore20200620_v1.1.0.7z
Releases · gogowaten/userControl
https://github.com/gogowaten/userControl/releases
github.com
設定例
プロパティ名 | 型 | 既定値 | 説明 |
---|---|---|---|
MyValue | decimal | 0m | 値 |
MyText | String | "" | MyValueを書式に従ってToStringしたもの、表示用 |
MyMinValue | decimal | decimal.MinValue | 最小値、下限 |
MyMaxValue | decimal | decimal.MaxValue | 最大値、上限 |
MySmallChange | decimal | 1m | 小変更値、ボタン押したときの変化値 |
MyLargeChange | decimal | 10m | 大変更値、ボタンの上でホイール回したときの変化値 |
MyStringFormat | String | "" | 書式、MyValue.ToString(書式)で使う |
MyButtonMarkColor | ? | "DarkGray" | ボタンの▲マークの色 |
MyTextAlignment | TextAlignment | Right | 表示位置、左寄せ、中央、右寄せ |
下の2つが今回追加したプロパティ
追加
- ボタンの▼と▲マークの色指定(MyButtonMarkColor)
- TextBoxの
- FontSize指定
- Foreground
- Background
- BorderBrush
- TextAlignment(MyTextAlignment)
変更
- ボタンの▲と▼マークの形
- ボタンのサイズ(Width)をコントロールの高さActualHeightに合わせるようにした
▲マークの色とTextAlignment
普通に依存関係プロパティを追加して
FillプロパティにMyButtonMarkColorをBinding、68行目
ElementNameで指定しているMyRootPanelはUserControlそのもので
9行目で名前を付けておいたもの
BindingのソースにUserControlを指定するときに、前回は
RelativeSourceを使っていたけど、今回はUserControlに名前をつけたので
ElementNameを使って、こうなった。こっちのほうがラクなんだけど、これでいいのかはわからん
TextAlignmentはTextBoxの方なので、他のと一緒に
こうで、追加したところは
ソースはUserControlのNumericUpDownで、それぞれの同名のプロパティにBindingしている。最後のTextAlignmentだけはさっきの依存関係プロパティのMyTextAlignmentにBindingしているのは、UserControlにはTextAlignmentプロパティがなかったから
Modeは全部OneWayにしているけどTextAlignmentだけはTwoWayでもいいかも
前回はFontSizeとHeightを別々に指定して表示の調整をしていた
フォントが大きすぎるとこうなっていた
Heightを適当に合わせて調整、めんどくさい
前回のボタンの大きさと▲の形
どれだけNumericUpDownを大きくしても、ボタンの大きさ(幅)は変化なしだった
今回は
FontSizeの指定だけで適当な大きさになる
Control全体の大きさ(Height)もFontSizeに合わせて変化
ボタンの大きさは
ボタン(RepeatButton)を配置するGridの区切りのColumnDefinitionのWidthプロパティに、UserControl自体のActualHeightをBindingして調整している、24~28行目
ActualHeightの数値をそのままWidthにすると大きすぎるので、適当な数値で割り算した結果を使いたいのでコンバーターを作成して使っている、14行目、28行目
コンバーター
467行目、ConvertBackを使っていないのは一方通行だからで、UserControlのActualHeight→ColumnDefinitionのWidthへの一方通行。
460行目、ConvertではActualHeightを1/3にして返している、462~464行目
1/3ってのは適当に決めたんだけど、その試しているときに1/2以上の1/1.9とかにしたら、無限ループでエラーになってめんどくさかった。で、1/2.1以上なら動いたからこれ(1/3)でいいわってことにしたんだけど、なにかの拍子に変な動きなるかも
今回のでNumericUpDownは完成
2年前に作ったものよりいいのができて満足
関連記事
次回は8ヶ月後
前回は5日前
.NET Core、WPF、ユーザーコントロールのDLLをアプリで使うまでの手順メモ - 午後わてんのブログ