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

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

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

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

WPF

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

解決済

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

propg
propg

総合スコア112

C#

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

WPF

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

2回答

0グッド

0クリップ

6666閲覧

投稿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様の案を実行した結果
イメージ説明
イメージ説明

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答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を継承して自分で作るしかないんじゃないでしょうか。

0

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

投稿2018/04/10 12:14

Zuishin

総合スコア27644

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

propg

2018/04/11 00:47

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

2018/04/11 03:07

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

2018/04/11 04:15

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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

WPF

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