WPF、Borderの背景色(Background.Brush)とスライダーの値を双方向バインディング?
目的
MultiBindingとIMultiValueConverterを使って
Borderの背景色(Background.Brush)とスライダーの値を双方向バインディング
ボタンはBorderの背景色を変更しているだけでスライダーの値には触っていない
背景色(Background.Brush)←→スライダー
↑
ボタンで変更
期待どおりの動きなんだけど…
今回のアプリのダウンロード先
デザイン画面
ヤフーブログのかんたんモードでXAMLを書くと投稿エラーになるから画像で
VBのコード
背景色の指定はBackgroundPropertyにBrushを指定する
Brushの色はRGB各色で指定するので3つの値が必要
マルチバインディングにはMultiValueConverterが必要
RGBとBrushを相互変換?するMultiValueConverter
問題なくできたのはRGB3つの値をBrushに変換するConvert(7行目~14行目)
Values()の中には入れた順番に3つの値が入っているから、それを取り出してSolidColorBrushを作成してそれを返している、これはOK
できなかったのがBrushの色のRGBを取り出して返す方のConvertBack(18行目)、できなかったので空っぽのObjectを返している(何か返さないとエラーっぽくなる)
最初に書いたのが
Public Function ConvertBack(value As Object, targetTypes() As Type, parameter As Object, culture As CultureInfo) As Object() Implements IMultiValueConverter.ConvertBack
Dim b As SolidColorBrush = value
Dim obj() As Object = New Object() {b.Color.R, b.Color.G, b.Color.B}
Return obj
End Function
3つの値は返せているはずなんだけどスライダーの値は変化してくれなかったので、今回はConvertBackの引数のparameterを使う方法になった
parameterにMainWindowを入れて渡す
これを受け取ったConverterの方では
なのでこれはバインディングじゃない気がするんだよねえ
変な方法になったけど一応動いた感じ
今回のコード全部
関連記事
前回は3日前
2017/06/20
WPF、ScaleTransformと作成した依存プロパティをBinding ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/14981395.html
次の記事、2017/06/24
WPF、CanvasLeftTopとSliderValueをBinding ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/14988621.html
2018/04/06は10ヶ月後
カラーピッカーのdll(ライブラリ)作った、WPFユーザーコントロール ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/15447603.html
右上のBorderのbackgroundとRGBAの各値をマルチバインディングしている