投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/8/31 16:12:08
> WPFで文字数の入力制限を行っています。
> 例えば10バイト以上入力した際に
「文字数」なのか「バイト数」なのかハッキリしないですね…?

たとえば "👩‍👩‍👧‍👧" という結合絵文字は、この 1 文字だけで
 System.Char だと 11 個
 System.Text.Rune だと 7 個
から構成されており、これをバイト数で数えると
 UTF-16 だと 22 バイト
 UTF-8 だと 25 バイト
という換算になります。


> 超えた分の文字色のみ色を変えたいです。
> ツイッターの文字数オーバーした時のイメージです。
あれは文字色ではなく背景色だったかと思います。(おそらくは、カラー絵文字への配慮のため)

文字色にせよ文字背景色にせよ、文字単位で色を変えるとなると、
TextBox では対応できないと思います。
RichTextBox を用いるか、もしくは TextBlock を使うことになるでしょう。

単純に文字数で良いのなら、こんな感じで切り出して、
これらの Inline を RichTextBox なり TextBlock なりに出力するとか。
Dim text As String = 入力された文字列
Dim s1 As String = Strings.Left(text, 10)  '先頭10文字 
Dim s2 As String = Strings.Mid(text, 11)  'それ以降の超過分 
Dim normalText As Inline = New Run(s1) 
Dim overText As Inline = New Run(s2) With {.Background = New SolidColorBrush(Colors.Yellow)}