クリップボードにコピーしたテキストを WPF の TextBox に貼り付けようとしたが、できなかったので、最初は IsReadOnly プロパティが True になっているのかと思った。しかし IsReadOnly を False にしてもやはりペーストできなかった(そもそも、デフォルトで IsReadOnly は False だし)。
結論
結論を言うと、下記の2つの条件が一致しているとき、WPF の TextBox にテキストをペーストできないことが分かった。
- 貼り付けようとしているテキストに改行が含まれている
- TextBox の AcceptsReturn(改行を許可する)プロパティが False になっている(デフォルトは False)
なので、下図のように、TextBox の AcceptsReturn を True にすれば、改行を含むテキストを貼り付けることができるし、TextBox 内に改行を入力することもできるようになる。
WPF の TextBox と Forms の TextBox の比較
ここからは本題から少しそれた話になるが、上記の件について WPF と Forms の違いを記載しておく。
Forms で TextBox を作成した直後は、下図のような状態になる。
上図では、マウスでサイズ変更できる箇所を示す小さな白い四角(正式名称なんだっけ?)が2か所表示されていて、縦方向にはサイズ変更できず横方向にのみ伸縮可能なことが分かる。つまり、デフォルトでは1行しか入力できないことを連想しやすい。
Forms の TextBox は Multiline プロパティを True にすると、複数行の入力が可能になる(ちなみに WPF の TextBox に Multiline プロパティは存在しない)。
Multiline が True になると、Forms の TextBox の周りの小さな白い四角の数が8個に増えて、縦方向にもサイズ変更できることが示されるので、複数行の入力が可能であることを連想しやすい。
これが当然だと思っていた私のような Forms 出身者は、WPF の TextBox を使うときに戸惑いやすい。
どういうことかというと、WPF では、TextBox を作成した直後は下図のようになっている。
WPF の TextBox では、デフォルトで1行しか貼り付け(入力)できないにも関わらず(複数行の入力が可能な Forms の TextBox の表示と同様に)小さな白い四角が8個表示されていて、縦にも横にも伸縮可能になっている。
注意しましょう!