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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WPF

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

Q&A

解決済

1回答

994閲覧

WPF の RichTextBox に任意の位置に線など引くにはどのようにしたらいいですか

byori

総合スコア71

WPF

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

0グッド

0クリップ

投稿2020/03/06 02:47

WPF では、WinForm のように任意のタイミングで再描画や特定のコントロールに線など描画できないようですね。
なかなかグーグルでヒットしません。

下記のようなサンプルはありましたが、どうやら特定のコントロールを指定して書くことはできないようです。

C#

1DrawingVisual drawingVisual = new DrawingVisual(); 2 3// Retrieve the DrawingContext in order to create new drawing content. 4DrawingContext drawingContext = drawingVisual.RenderOpen(); 5 6// Create a rectangle and draw it in the DrawingContext. 7Rect rect = new Rect(new System.Windows.Point(160, 100), new System.Windows.Size(320, 80)); 8drawingContext.DrawRectangle(System.Windows.Media.Brushes.LightBlue, (System.Windows.Media.Pen)null, rect); 9 10// Persist the drawing content. 11drawingContext.Close();

実際には、下記のコードを呼んでRichTextBox に波線を引きたいのですが、どこから呼び出すようにしたらいいのかわかりません。
VisualTreeHelper より目的のコントロールを探すことも試しましたが、今のところヌルしか戻りません。

C#

1 private void DrawWave(System.Windows.Media.DrawingContext graphics, System.Windows.Point StartOfLine, System.Windows.Point EndOfLine) 2 { 3 System.Windows.Media.Pen newPen = new System.Windows.Media.Pen(System.Windows.Media.Brushes.Red, 1); 4 5 if ((EndOfLine.X - StartOfLine.X) > 4) 6 { 7 System.Collections.ArrayList pl = new System.Collections.ArrayList(); 8 for (int i = (int)StartOfLine.X; i <= ((int)EndOfLine.X - 2); i += 4) 9 { 10 pl.Add(new System.Windows.Point(i, StartOfLine.Y)); 11 pl.Add(new System.Windows.Point(i + 2, StartOfLine.Y + 2)); 12 } 13 14 Point[] p = (Point[])pl.ToArray(typeof(Point)); 15 for (int i = 0; i < p.Length - 1; ++i) 16 graphics.DrawLine(newPen, p[i], p[i + 1]); 17 } 18 else 19 { 20 graphics.DrawLine(newPen, StartOfLine, EndOfLine); 21 } 22 } 23

VS2015 C# WPF

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

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

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

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

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

byori

2020/03/06 07:02

お世話になります。 TextBox でも波線が引けるのですね。WinForm のイメージが強く RichTextBox しかできないものと思い込んでいました。 ただ、波線の範囲を区切って引く(例えば、協調したい言葉など)場合、どのプロパティに値をセットするのでしょうか?
Zuishin

2020/03/06 07:08

Run です。
guest

回答1

0

自己解決

お世話になります。
調べた結果、下記のような感じでできることがわかりました。

C#

1TextBlock box = new TextBlock(); 2box.TextWrapping = TextWrapping.Wrap; 3 4List<Run> runs = new List<Run>(); 5 6Run run1 = new Run(); 7run1.Text = "黒色文字列"; 8runs.Add(run1); 9 10Run run2 = new Run(); 11run2.Text = "赤色文字列"; 12run2.Foreground = new SolidColorBrush(Colors.Red); 13runs.Add(run2); 14 15box.Inlines.Clear(); 16box.Inlines.AddRange(runs);

色々調べているうちに少し欲が出てきたのでもう少し調べてみますが、
Zuishin さんの投稿を回答とさせていただきます。
ありがとうございました。

投稿2020/03/07 02:24

編集2020/03/07 02:33
byori

総合スコア71

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問