質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

8644閲覧

WPFの複数行入力テキストボックスでの折り返し

propg

総合スコア113

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2018/04/10 10:52

編集2018/04/11 07:57

WPFのテキストボックスで複数行入力可能にする場合、TextWrapping="Wrap"を指定すればよいですが、折り返し位置は、WordWrapのルールで、単語の切れ目で折り返しされます。

通常はこれでも問題ないのですが、Wordwrap的ではなく、単純に右端で折り返すようにしたい場合の方法について、WPFでの実装方法が見つかっていません。

他のサイトでも質問している方はいらっしゃいますが、回答は得られていません。
これはどう頑張っても実装不可能なのでしょうか?

サクラエディタのようなテキスト入力を実現するイメージです。
Windows FormではAPIを使用して解決していますが、WPFでは使用できません。

こんなイメージです

WindowsFormsHostで、Windows FormのTextboxをラップして実装はしましたが、見た目が他のコントロールと異なるのと、生成のタイミングが違うのか、初期表示時など、このテキストボックスのみが浮いているような表示でちらつくため、いまいちです。
できればWPFのみで実現したいです。

WordWrapしないほうが実装はシンプルではないかと思うのですが、なぜ標準的な折り返し機能が実装されていないのか、いまだ謎です。

どなたか情報をお持ちの方、教えてください。

▼sh_akira様の案を実行した結果
イメージ説明
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

あまりいい方法とは言えませんが、普通の半角スペース0x20を0xA0のNO BREAK SPACEに
置き換える方法があります。

csharp

1private void TextBox_TextChanged(object sender, TextChangedEventArgs e) 2{ 3 var textbox = (TextBox)sender; 4 var currentPosition = textbox.SelectionStart; 5 textbox.Text = textbox.Text.Replace(" ", "\u00a0"); 6 textbox.SelectionStart = currentPosition; 7}

保存時に逆のReplaceで戻さないといけないのと、本当に0x20と0xA0両方使いたいときに
どうしようもないのに注意です。

それから、IMEでの入力中に半角スペースが入ると確定されたりします。

投稿2018/04/11 06:50

編集2018/04/11 06:53
sh_akira

総合スコア380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

propg

2018/04/11 07:58 編集

回答ありがとうございます。 試してみたところ、スペース位置での折り返しは行われなくなりました。 素晴らしい案だと思いましたが、空白を入れない続き文字の途中でも自動的に折り返しされる場合があり、こちらは空白の置換だけでは対応のしようがありません。折り返しルールが謎です ※質問内容末尾に実行結果画像を追加しました
sh_akira

2018/04/12 01:43

たしかに、全角文字のあと半角文字で埋めるだけでそこが単語区切りの認識になるようですね。 "あaaaaaaaaaaaa"とか。 多分TextBoxBaseを継承して自分で作るしかないんじゃないでしょうか。
guest

0

英語圏では標準でないからです。
鶏に牛刀という気はしますがこういうのはどうでしょうか?
AvalonEdit

投稿2018/04/10 12:14

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

propg

2018/04/11 00:47

回答ありがとうございます。 AvalonEdit確認してみましたが、禁則処理の無効設定は見当たりませんでした。どこかにあります? これも日本人が作ったものではないので、当然なのかもしれません。
Zuishin

2018/04/11 03:07

すみません。よく見たら上記は AvalonEdit ではなく Azuki でした。 こっちは日本人が開発者ですね。
propg

2018/04/11 04:15

AzukiはWPFではないんですよね。 AvalonEditで実装されてたらソースを参考にできるかと思ったのですが。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問