午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

WPF、BindingのStringFormat、数値の書式設定をVBコードで

 
XAMLじゃなくてVBコードで
Bindingした数値の書式設定
イメージ 1
SliderのValuePropertyはDouble型、これを各TextBlockのTextPropertyにBindingして表示するときの書式設定の例
 
数値が123.45で
表示 小数点以下が要らないとき
123 Binding.StringFormat = "0"
123 Binding.StringFormat = "{0:0}"
 
数値の前や後ろに文字列を追加したいとき
文字列123 Binding.StringFormat = "文字列{0:0}"
123文字列 Binding.StringFormat = "{0:0}文字列"
字123字 Binding.StringFormat = "字{0:0}字"
 
 
0のとき
イメージ 4
 
 
一桁整数のとき
イメージ 5
 
二桁整数のとき
イメージ 6
マイナスの一桁
イメージ 7
文字列と組み合わせたときのマイナス記号が表示される位置
{}を使わないと変な位置に付く
 
小数点
イメージ 8
小数点
イメージ 9
 
 
参照したところ
BindingBase.StringFormat プロパティ(System.Windows.Data)
https://msdn.microsoft.com/ja-jp/library/system.windows.data.bindingbase.stringformat(v=vs.110).aspx

Nine Works WPFのStringFormatによるフォーマット指定
http://nineworks2.blog.fc2.com/blog-entry-10.html

数字をBindingするときの書式指定|かに太郎、ただいま開発中
http://ameblo.jp/kani-tarou/entry-10202879097.html

標準の数値書式指定文字列
https://msdn.microsoft.com/ja-jp/library/dwhawy9k.aspx

標準の数値書式指定文字列
https://msdn.microsoft.com/ja-jp/library/dwhawy9k.aspx#GFormatString
ありがとうございます!
 
 
 
 
VBコード
Class MainWindow
    Private Sub MainWindow_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized

        Dim b As New Binding("Value") With {.Source = Slider1}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "0"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "0.0"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "0.000"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "00.000"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "000.000"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "##0.000"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "スライダーの値 = 0.000"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "スライダーの値 = {0:0.000}"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "スライダーの値 = {0.000}"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "{0:00.000}"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "{0:N3}"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "N3"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "P3"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "G20"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "G5"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "{0:G5}"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "{0:C}"}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "{0:C}",
            .ConverterCulture = System.Globalization.CultureInfo.CurrentCulture}
        Call SetTextBlock(b)

        b = New Binding("Value") With {.Source = Slider1, .StringFormat = "{0:C2}",
            .ConverterCulture = System.Globalization.CultureInfo.CurrentCulture}
        Call SetTextBlock(b)

    End Sub
    Private Sub SetTextBlock(b As Binding)
        Dim tb As New TextBlock
        tb.SetBinding(TextBlock.TextProperty, b)
        LeftPanel.Children.Add(tb)

        'Dim str As String
        'str = $"StringFormat = ""{b.StringFormat}"""

        tb = New TextBlock With {.Text = b.StringFormat}
        RightPanel.Children.Add(tb)
    End Sub
End Class
 
 

f:id:gogowaten:20191031122413p:plain

イメージ 3
ヤフーブログのかんたんモードだとXAMLのコードは投稿できないから画像で
 
 
文字列の値をBindingして表示するときに別の文字列を付け足すときは{0}
次のVB.NET記事は8日後
EdgeModeでアンチエイリアスの有無を切り替え、WPF ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/14910458.html
 
 
 
1年ぶりくらいにWPFでのアプリ作成再開したけどすんごい忘れていてまた最初から調べなおしている感じ、また夏になったら完全に止まっちゃうからいつになったらできるかわかんないな
今くらいの気候が続いてくれたら最高なんだけどなあ