teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

見直しキャンペーン中

2023/07/21 10:18

投稿

TN8001
TN8001

スコア10108

answer CHANGED
@@ -1,133 +1,134 @@
1
- まずこの使用法はサポート外のようです。
2
- [Run.Text プロパティ (System.Windows.Documents) | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.documents.run.text)
3
- > 注意
4
- >
5
- > Run 内RichTextBoxに含まれるオブジェクトへのテキストのバインドはサポートされていません。 内でRichTextBox操作を編集すると、バインドがクリアされる可能性があります。
6
-
7
- いろいろ実験していたら、コードビハインドで`Source`を明示して追加した場合消えなくなりました。??
8
- ```C#
9
- var run = new Run { FontFamily = new FontFamily("Meiryo"), FontSize = 14, };
10
- var binding = new Binding("TEXTCTL") { Source = DataContext, };
11
- run.SetBinding(Run.TextProperty, binding);
12
- richTextBox.Document.Blocks.Add(new Paragraph(run));
13
- ```
14
-
15
- しかし先頭に文字追加・途中で改行・行の削除等々、期待する動作と違わないですか?
16
-
17
- じゃあどうするかですが、
18
- [WPFのRichTextBoxにBindingする - Qiita](https://qiita.com/soi/items/ac970626af21aa5a362f)
19
- 方法2や方法3(プロパティ単体ではViewでの変更を検知できない)
20
-
21
- [RichTextBox・xceedsoftware / wpftoolkit Wiki](https://github.com/xceedsoftware/wpftoolkit/wiki/RichTextBox)
22
- のTextプロパティにバインディング(遅い遅いと言われているよう)
23
-
24
- とかでしょうか。
25
-
26
- (なぜバインディングしているか等)もう少し詳しい使用法がわかると、ほかの解決策もあるかもしれません。
27
-
28
- ---
29
-
30
- 追記
31
- `AvalonEdit`の`SyntaxHighlighting`をテストしました。
32
-
33
- 専用エディタとしてどんなフォーマットがいいか悩んだのですが、安直にINIファイルにしました^^;
34
-
35
- ##### 強調する構文
36
- * コメント(Green)
37
- * セクショBold Blue
38
- * キー名(Firebrick
39
- * 最初のイコSteelBlue
40
- * 数値DarkBlue
41
- * boolDarkCyan
42
- * エラーRed
43
- * セクション前後の文字
44
- * キーなし
45
- * イコなし
46
-
47
- ![アプリ画像](48dfdbd6239995da975b45f535963805.png)
48
-
49
- ```xml
50
- <?xml version="1.0"?>
51
- <SyntaxDefinition name="INI" extensions=".ini" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
52
- <Color name="Comment" foreground="Green" />
53
- <Color name="Bracket" foreground="Black" />
54
- <Color name="Section" foreground="Blue" fontWeight="bold" />
55
- <Color name="Key" foreground="Firebrick" />
56
- <Color name="Equal" foreground="SteelBlue" />
57
- <Color name="TrueFalse" foreground="DarkCyan" />
58
- <Color name="NumberLiteral" foreground="DarkBlue" />
59
- <Color name="Error" foreground="Red" />
60
-
61
- <RuleSet>
62
- <!-- コメント行 -->
63
- <Span begin="^;" color="Comment" />
64
-
65
-
66
- <!-- セクション行 -->
67
- <!-- ベースをエラーにして正しい部分だけ色を付ける
68
- '='が含まれていなく(パタ行ではない)後ろ'['があ行全体
69
- "^[^=]*?[" だと'['Errorに食われてしまうの肯定先読み
70
- ".+?(?=])" も同様 ']'をSection含めない -->
71
- <Span begin="^[^=]*?(?=[)" color="Error" >
72
- <RuleSet>
73
- <Span begin="[" end="" color="Bracket" />
74
- <Span begin="]" end="" color="Bracket" />
75
- <Span begin=".+?(?=])" end="" color="Section" />
76
- </RuleSet>
77
- </Span>
78
-
79
-
80
- <!-- パラメータ行 -->
81
- <!-- キーなし(イコール始まり)はエラー -->
82
- <Span begin="^\s*=" color="Error" />
83
- <!-- イコールなしはエラー -->
84
- <Span begin="^(?!.*=).+$" color="Error" />
85
-
86
- <!-- キー名&初めのイコール -->
87
- <!-- まず肯定先読みでイコールの前まで取り色付け
88
- 以降をネストのSpanで処理する-->
89
- <Span begin="^[^[]*?(?==)" color="Key">
90
- <RuleSet>
91
- <!-- イコールが先頭で来るのは確定なのでイコール1文字だけ取り色付け
92
- 以降をネストのSpanで処理する-->
93
- <Span begin="=" color="Equal">
94
- <RuleSet>
95
- <Import ruleSet="TrueFalse" />
96
- <Import ruleSet="NumberLiteral" />
97
- <!-- boolでもnumberでもなければ黒に上書き -->
98
- <Rule foreground="Black">.</Rule>
99
- </RuleSet>
100
- </Span>
101
- </RuleSet>
102
- </Span>
103
-
104
- </RuleSet>
105
-
106
-
107
- <RuleSet name="TrueFalse" ignoreCase="true">
108
- <Keywords color="TrueFalse">
109
- <Word>true</Word>
110
- <Word>false</Word>
111
- </Keywords>
112
- </RuleSet>
113
-
114
- <RuleSet name="NumberLiteral">
115
- <Keywords color="NumberLiteral">
116
- <Word>NaN</Word>
117
- </Keywords>
118
- <Rule color="NumberLiteral">
119
- \b0[xX][0-9a-fA-F]+ # hex number
120
- | \b
121
- ( \d+(.[0-9]+)? #number with optional floating point
122
- | .[0-9]+ #or just starting with floating point
123
- )
124
- ([eE][+-]?[0-9]+)? # optional exponent
125
- </Rule>
126
- </RuleSet>
127
- </SyntaxDefinition>
128
- ```
129
- 各言語用のxshdはたくさんあるのですが、キーワード主体で先読み後読みやSpanのネストの例があまり見つからず大変でした^^;
130
-
131
- ついでに`Folding` `Code Completion`も使ってみました。
132
- 雑とはえかなりのコード量たため、GitHubにあげました。
1
+ まずこの使用法はサポート外のようです。
2
+ [Run.Text プロパティ (System.Windows.Documents) | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.documents.run.text)
3
+ > 注意
4
+ >
5
+ > Run 内RichTextBoxに含まれるオブジェクトへのテキストのバインドはサポートされていません。 内でRichTextBox操作を編集すると、バインドがクリアされる可能性があります。
6
+
7
+ いろいろ実験していたら、コードビハインドで`Source`を明示して追加した場合消えなくなりました。??
8
+ ```cs
9
+ var run = new Run { FontFamily = new FontFamily("Meiryo"), FontSize = 14, };
10
+ var binding = new Binding("TEXTCTL") { Source = DataContext, };
11
+ run.SetBinding(Run.TextProperty, binding);
12
+ richTextBox.Document.Blocks.Add(new Paragraph(run));
13
+ ```
14
+
15
+ しかし先頭に文字追加・途中で改行・行の削除等々、期待する動作と違わないですか?
16
+
17
+ じゃあどうするかですが、
18
+
19
+ [WPFRichTextBoxにBindingする - Qiita](https://qiita.com/soi/items/ac970626af21aa5a362f)
20
+ の方法2や方法3(プロパティ単体ではViewでの変更を検知できない)
21
+
22
+ [RichTextBox・xceedsoftware / wpftoolkit Wiki](https://github.com/xceedsoftware/wpftoolkit/wiki/RichTextBox)
23
+ のTextプロパティにバインディング(遅い遅いと言われているよう)
24
+
25
+ とかでしょうか。
26
+
27
+ (なぜバインディングしているか等)もう少し詳しい使用法がわかると、ほかの解決策もあるかもしれません。
28
+
29
+ ---
30
+
31
+ 追記
32
+ `AvalonEdit`の`SyntaxHighlighting`をテストしました。
33
+
34
+ 専用エディタとしてどんなフォーマットがいいか悩んだのですが、安直にINIファイルにしました^^;
35
+
36
+ ##### 強調する構文
37
+ * コメGreen
38
+ * セクション名(Bold Blue
39
+ * Firebrick
40
+ * 最初のイコールSteelBlue
41
+ * 数値DarkBlue
42
+ * boolDarkCyan
43
+ * エラー(Red)
44
+ * セクション前後の文字
45
+ * ーなし
46
+ * イコールなし
47
+
48
+ ![アプリ画像](48dfdbd6239995da975b45f535963805.png)
49
+
50
+ ```xml
51
+ <?xml version="1.0"?>
52
+ <SyntaxDefinition name="INI" extensions=".ini" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
53
+ <Color name="Comment" foreground="Green" />
54
+ <Color name="Bracket" foreground="Black" />
55
+ <Color name="Section" foreground="Blue" fontWeight="bold" />
56
+ <Color name="Key" foreground="Firebrick" />
57
+ <Color name="Equal" foreground="SteelBlue" />
58
+ <Color name="TrueFalse" foreground="DarkCyan" />
59
+ <Color name="NumberLiteral" foreground="DarkBlue" />
60
+ <Color name="Error" foreground="Red" />
61
+
62
+ <RuleSet>
63
+ <!-- コメント行 -->
64
+ <Span begin="^;" color="Comment" />
65
+
66
+
67
+ <!-- セクション行 -->
68
+ <!-- ベースをエラーにして正しい部分だけ色を付け
69
+ '='が含まれていなく(パラメータ行はない)後ろに'['がある行全体
70
+ "^[^=]*?[" だと'['がError食われてしまうので肯定先読み
71
+ ".+?(?=])" も同様 ']'をSectionに含めない -->
72
+ <Span begin="^[^=]*?(?=[)" color="Error" >
73
+ <RuleSet>
74
+ <Span begin="[" end="" color="Bracket" />
75
+ <Span begin="]" end="" color="Bracket" />
76
+ <Span begin=".+?(?=])" end="" color="Section" />
77
+ </RuleSet>
78
+ </Span>
79
+
80
+
81
+ <!-- タ行 -->
82
+ <!-- キーなし(イコール始まり)はエラー -->
83
+ <Span begin="^\s*=" color="Error" />
84
+ <!-- イコールなしはエラー -->
85
+ <Span begin="^(?!.*=).+$" color="Error" />
86
+
87
+ <!-- キー名&初めのイコール -->
88
+ <!-- まず肯定先読みでイコールの前まで取り色付け
89
+ 以降をネストのSpanで処理する-->
90
+ <Span begin="^[^[]*?(?==)" color="Key">
91
+ <RuleSet>
92
+ <!-- イコールが先頭で来るのは確定なのでイコール1文字だけ取り色付け
93
+ 以降をネストのSpanで処理する-->
94
+ <Span begin="=" color="Equal">
95
+ <RuleSet>
96
+ <Import ruleSet="TrueFalse" />
97
+ <Import ruleSet="NumberLiteral" />
98
+ <!-- boolでもnumberでもなければ黒に上書き -->
99
+ <Rule foreground="Black">.</Rule>
100
+ </RuleSet>
101
+ </Span>
102
+ </RuleSet>
103
+ </Span>
104
+
105
+ </RuleSet>
106
+
107
+
108
+ <RuleSet name="TrueFalse" ignoreCase="true">
109
+ <Keywords color="TrueFalse">
110
+ <Word>true</Word>
111
+ <Word>false</Word>
112
+ </Keywords>
113
+ </RuleSet>
114
+
115
+ <RuleSet name="NumberLiteral">
116
+ <Keywords color="NumberLiteral">
117
+ <Word>NaN</Word>
118
+ </Keywords>
119
+ <Rule color="NumberLiteral">
120
+ \b0[xX][0-9a-fA-F]+ # hex number
121
+ | \b
122
+ ( \d+(.[0-9]+)? #number with optional floating point
123
+ | .[0-9]+ #or just starting with floating point
124
+ )
125
+ ([eE][+-]?[0-9]+)? # optional exponent
126
+ </Rule>
127
+ </RuleSet>
128
+ </SyntaxDefinition>
129
+ ```
130
+ 各言語用のxshdはたくさんあるのですが、キーワード主体で先読み後読みやSpanのネストの例があまり見つからず大変でした^^;
131
+
132
+ `Folding`・`Code Completion`も使てみました。
133
+ 雑とはいえかなりのコード量になったため、GitHubにあげました。
133
134
  [TN8001/IniEditor: AvalonEdit Syntax Highlighting, Folding and Code Completion example.](https://github.com/TN8001/IniEditor)

3

画像追加

2020/04/23 09:32

投稿

TN8001
TN8001

スコア10108

answer CHANGED
@@ -44,6 +44,8 @@
44
44
  * キーなし
45
45
  * イコールなし
46
46
 
47
+ ![アプリ画像](48dfdbd6239995da975b45f535963805.png)
48
+
47
49
  ```xml
48
50
  <?xml version="1.0"?>
49
51
  <SyntaxDefinition name="INI" extensions=".ini" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">

2

AvalonEdit SyntaxHighlighting

2020/04/23 09:32

投稿

TN8001
TN8001

スコア10108

answer CHANGED
@@ -23,4 +23,109 @@
23
23
 
24
24
  とかでしょうか。
25
25
 
26
- (なぜバインディングしているか等)もう少し詳しい使用法がわかると、ほかの解決策もあるかもしれません。
26
+ (なぜバインディングしているか等)もう少し詳しい使用法がわかると、ほかの解決策もあるかもしれません。
27
+
28
+ ---
29
+
30
+ 追記
31
+ `AvalonEdit`の`SyntaxHighlighting`をテストしました。
32
+
33
+ 専用エディタとしてどんなフォーマットがいいか悩んだのですが、安直にINIファイルにしました^^;
34
+
35
+ ##### 強調する構文
36
+ * コメント(Green)
37
+ * セクション名(Bold Blue)
38
+ * キー名(Firebrick)
39
+ * 最初のイコール(SteelBlue)
40
+ * 数値(DarkBlue)
41
+ * bool(DarkCyan)
42
+ * エラー(Red)
43
+ * セクション前後の文字
44
+ * キーなし
45
+ * イコールなし
46
+
47
+ ```xml
48
+ <?xml version="1.0"?>
49
+ <SyntaxDefinition name="INI" extensions=".ini" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
50
+ <Color name="Comment" foreground="Green" />
51
+ <Color name="Bracket" foreground="Black" />
52
+ <Color name="Section" foreground="Blue" fontWeight="bold" />
53
+ <Color name="Key" foreground="Firebrick" />
54
+ <Color name="Equal" foreground="SteelBlue" />
55
+ <Color name="TrueFalse" foreground="DarkCyan" />
56
+ <Color name="NumberLiteral" foreground="DarkBlue" />
57
+ <Color name="Error" foreground="Red" />
58
+
59
+ <RuleSet>
60
+ <!-- コメント行 -->
61
+ <Span begin="^;" color="Comment" />
62
+
63
+
64
+ <!-- セクション行 -->
65
+ <!-- ベースをエラーにして正しい部分だけ色を付ける
66
+ '='が含まれていなく(パラメータ行ではない)後ろに'['がある行全体
67
+ "^[^=]*?[" だと'['がErrorに食われてしまうので肯定先読み
68
+ ".+?(?=])" も同様 ']'をSectionに含めない -->
69
+ <Span begin="^[^=]*?(?=[)" color="Error" >
70
+ <RuleSet>
71
+ <Span begin="[" end="" color="Bracket" />
72
+ <Span begin="]" end="" color="Bracket" />
73
+ <Span begin=".+?(?=])" end="" color="Section" />
74
+ </RuleSet>
75
+ </Span>
76
+
77
+
78
+ <!-- パラメータ行 -->
79
+ <!-- キーなし(イコール始まり)はエラー -->
80
+ <Span begin="^\s*=" color="Error" />
81
+ <!-- イコールなしはエラー -->
82
+ <Span begin="^(?!.*=).+$" color="Error" />
83
+
84
+ <!-- キー名&初めのイコール -->
85
+ <!-- まず肯定先読みでイコールの前まで取り色付け
86
+ 以降をネストのSpanで処理する-->
87
+ <Span begin="^[^[]*?(?==)" color="Key">
88
+ <RuleSet>
89
+ <!-- イコールが先頭で来るのは確定なのでイコール1文字だけ取り色付け
90
+ 以降をネストのSpanで処理する-->
91
+ <Span begin="=" color="Equal">
92
+ <RuleSet>
93
+ <Import ruleSet="TrueFalse" />
94
+ <Import ruleSet="NumberLiteral" />
95
+ <!-- boolでもnumberでもなければ黒に上書き -->
96
+ <Rule foreground="Black">.</Rule>
97
+ </RuleSet>
98
+ </Span>
99
+ </RuleSet>
100
+ </Span>
101
+
102
+ </RuleSet>
103
+
104
+
105
+ <RuleSet name="TrueFalse" ignoreCase="true">
106
+ <Keywords color="TrueFalse">
107
+ <Word>true</Word>
108
+ <Word>false</Word>
109
+ </Keywords>
110
+ </RuleSet>
111
+
112
+ <RuleSet name="NumberLiteral">
113
+ <Keywords color="NumberLiteral">
114
+ <Word>NaN</Word>
115
+ </Keywords>
116
+ <Rule color="NumberLiteral">
117
+ \b0[xX][0-9a-fA-F]+ # hex number
118
+ | \b
119
+ ( \d+(.[0-9]+)? #number with optional floating point
120
+ | .[0-9]+ #or just starting with floating point
121
+ )
122
+ ([eE][+-]?[0-9]+)? # optional exponent
123
+ </Rule>
124
+ </RuleSet>
125
+ </SyntaxDefinition>
126
+ ```
127
+ 各言語用のxshdはたくさんあるのですが、キーワード主体で先読み後読みやSpanのネストの例があまり見つからず大変でした^^;
128
+
129
+ ついでに`Folding` `Code Completion`も使ってみました。
130
+ 雑とはいえかなりのコード量になったため、GitHubにあげました。
131
+ [TN8001/IniEditor: AvalonEdit Syntax Highlighting, Folding and Code Completion example.](https://github.com/TN8001/IniEditor)

1

nameof だとわかりにくいな

2020/04/23 09:28

投稿

TN8001
TN8001

スコア10108

answer CHANGED
@@ -7,7 +7,7 @@
7
7
  いろいろ実験していたら、コードビハインドで`Source`を明示して追加した場合消えなくなりました。??
8
8
  ```C#
9
9
  var run = new Run { FontFamily = new FontFamily("Meiryo"), FontSize = 14, };
10
- var binding = new Binding(nameof(TEXTCTL)) { Source = DataContext, };
10
+ var binding = new Binding("TEXTCTL") { Source = DataContext, };
11
11
  run.SetBinding(Run.TextProperty, binding);
12
12
  richTextBox.Document.Blocks.Add(new Paragraph(run));
13
13
  ```