回答編集履歴

4

見直しキャンペーン中

2023/07/21 10:18

投稿

TN8001
TN8001

スコア9326

test CHANGED
@@ -1,265 +1,134 @@
1
1
  まずこの使用法はサポート外のようです。
2
-
3
2
  [Run.Text プロパティ (System.Windows.Documents) | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.documents.run.text)
4
-
5
3
  > 注意
6
-
7
4
  >
8
-
9
5
  > Run 内RichTextBoxに含まれるオブジェクトへのテキストのバインドはサポートされていません。 内でRichTextBox操作を編集すると、バインドがクリアされる可能性があります。
10
6
 
11
-
12
-
13
7
  いろいろ実験していたら、コードビハインドで`Source`を明示して追加した場合消えなくなりました。??
14
-
15
- ```C#
8
+ ```cs
16
-
17
9
  var run = new Run { FontFamily = new FontFamily("Meiryo"), FontSize = 14, };
18
-
19
10
  var binding = new Binding("TEXTCTL") { Source = DataContext, };
20
-
21
11
  run.SetBinding(Run.TextProperty, binding);
22
-
23
12
  richTextBox.Document.Blocks.Add(new Paragraph(run));
24
-
25
13
  ```
26
14
 
27
-
28
-
29
15
  しかし先頭に文字追加・途中で改行・行の削除等々、期待する動作と違わないですか?
30
-
31
-
32
16
 
33
17
  じゃあどうするかですが、
34
18
 
35
19
  [WPFのRichTextBoxにBindingする - Qiita](https://qiita.com/soi/items/ac970626af21aa5a362f)
36
-
37
20
  の方法2や方法3(プロパティ単体ではViewでの変更を検知できない)
38
21
 
39
-
40
-
41
22
  [RichTextBox・xceedsoftware / wpftoolkit Wiki](https://github.com/xceedsoftware/wpftoolkit/wiki/RichTextBox)
42
-
43
23
  のTextプロパティにバインディング(遅い遅いと言われているよう)
44
-
45
-
46
24
 
47
25
  とかでしょうか。
48
26
 
49
-
50
-
51
27
  (なぜバインディングしているか等)もう少し詳しい使用法がわかると、ほかの解決策もあるかもしれません。
52
-
53
-
54
28
 
55
29
  ---
56
30
 
57
-
58
-
59
31
  追記
60
-
61
32
  `AvalonEdit`の`SyntaxHighlighting`をテストしました。
62
-
63
-
64
33
 
65
34
  専用エディタとしてどんなフォーマットがいいか悩んだのですが、安直にINIファイルにしました^^;
66
35
 
67
-
68
-
69
36
  ##### 強調する構文
70
-
71
37
  * コメント(Green)
72
-
73
38
  * セクション名(Bold Blue)
74
-
75
39
  * キー名(Firebrick)
76
-
77
40
  * 最初のイコール(SteelBlue)
78
-
79
41
  * 数値(DarkBlue)
80
-
81
42
  * bool(DarkCyan)
82
-
83
43
  * エラー(Red)
84
-
85
44
  * セクション前後の文字
86
-
87
45
  * キーなし
88
-
89
46
  * イコールなし
90
-
91
-
92
47
 
93
48
  ![アプリ画像](48dfdbd6239995da975b45f535963805.png)
94
49
 
95
-
96
-
97
50
  ```xml
98
-
99
51
  <?xml version="1.0"?>
100
-
101
52
  <SyntaxDefinition name="INI" extensions=".ini" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
102
-
103
53
  <Color name="Comment" foreground="Green" />
104
-
105
54
  <Color name="Bracket" foreground="Black" />
106
-
107
55
  <Color name="Section" foreground="Blue" fontWeight="bold" />
108
-
109
56
  <Color name="Key" foreground="Firebrick" />
110
-
111
57
  <Color name="Equal" foreground="SteelBlue" />
112
-
113
58
  <Color name="TrueFalse" foreground="DarkCyan" />
114
-
115
59
  <Color name="NumberLiteral" foreground="DarkBlue" />
116
-
117
60
  <Color name="Error" foreground="Red" />
118
61
 
119
-
120
-
121
62
  <RuleSet>
122
-
123
63
  <!-- コメント行 -->
124
-
125
64
  <Span begin="^;" color="Comment" />
126
65
 
127
66
 
128
-
129
-
130
-
131
67
  <!-- セクション行 -->
132
-
133
68
  <!-- ベースをエラーにして正しい部分だけ色を付ける
134
-
135
69
  '='が含まれていなく(パラメータ行ではない)後ろに'['がある行全体
136
-
137
70
  "^[^=]*?[" だと'['がErrorに食われてしまうので肯定先読み
138
-
139
71
  ".+?(?=])" も同様 ']'をSectionに含めない -->
140
-
141
72
  <Span begin="^[^=]*?(?=[)" color="Error" >
142
-
143
73
  <RuleSet>
144
-
145
74
  <Span begin="[" end="" color="Bracket" />
146
-
147
75
  <Span begin="]" end="" color="Bracket" />
148
-
149
76
  <Span begin=".+?(?=])" end="" color="Section" />
150
-
151
77
  </RuleSet>
152
-
153
78
  </Span>
154
79
 
155
80
 
156
-
157
-
158
-
159
81
  <!-- パラメータ行 -->
160
-
161
82
  <!-- キーなし(イコール始まり)はエラー -->
162
-
163
83
  <Span begin="^\s*=" color="Error" />
164
-
165
84
  <!-- イコールなしはエラー -->
166
-
167
85
  <Span begin="^(?!.*=).+$" color="Error" />
168
86
 
169
-
170
-
171
87
  <!-- キー名&初めのイコール -->
172
-
173
88
  <!-- まず肯定先読みでイコールの前まで取り色付け
174
-
175
89
  以降をネストのSpanで処理する-->
176
-
177
90
  <Span begin="^[^[]*?(?==)" color="Key">
178
-
179
91
  <RuleSet>
180
-
181
92
  <!-- イコールが先頭で来るのは確定なのでイコール1文字だけ取り色付け
182
-
183
93
  以降をネストのSpanで処理する-->
184
-
185
94
  <Span begin="=" color="Equal">
186
-
187
95
  <RuleSet>
188
-
189
96
  <Import ruleSet="TrueFalse" />
190
-
191
97
  <Import ruleSet="NumberLiteral" />
192
-
193
98
  <!-- boolでもnumberでもなければ黒に上書き -->
194
-
195
99
  <Rule foreground="Black">.</Rule>
196
-
197
100
  </RuleSet>
198
-
199
101
  </Span>
200
-
201
102
  </RuleSet>
202
-
203
103
  </Span>
204
-
205
-
206
104
 
207
105
  </RuleSet>
208
106
 
209
107
 
210
-
211
-
212
-
213
108
  <RuleSet name="TrueFalse" ignoreCase="true">
214
-
215
109
  <Keywords color="TrueFalse">
216
-
217
110
  <Word>true</Word>
218
-
219
111
  <Word>false</Word>
220
-
221
112
  </Keywords>
222
-
223
113
  </RuleSet>
224
114
 
225
-
226
-
227
115
  <RuleSet name="NumberLiteral">
228
-
229
116
  <Keywords color="NumberLiteral">
230
-
231
117
  <Word>NaN</Word>
232
-
233
118
  </Keywords>
234
-
235
119
  <Rule color="NumberLiteral">
236
-
237
120
  \b0[xX][0-9a-fA-F]+ # hex number
238
-
239
121
  | \b
240
-
241
122
  ( \d+(.[0-9]+)? #number with optional floating point
242
-
243
123
  | .[0-9]+ #or just starting with floating point
244
-
245
124
  )
246
-
247
125
  ([eE][+-]?[0-9]+)? # optional exponent
248
-
249
126
  </Rule>
250
-
251
127
  </RuleSet>
252
-
253
128
  </SyntaxDefinition>
254
-
255
129
  ```
256
-
257
130
  各言語用のxshdはたくさんあるのですが、キーワード主体で先読み後読みやSpanのネストの例があまり見つからず大変でした^^;
258
131
 
259
-
260
-
261
- ついでに`Folding` `Code Completion`も使ってみました。
132
+ ついでに`Folding``Code Completion`も使ってみました。
262
-
263
133
  雑とはいえかなりのコード量になったため、GitHubにあげました。
264
-
265
134
  [TN8001/IniEditor: AvalonEdit Syntax Highlighting, Folding and Code Completion example.](https://github.com/TN8001/IniEditor)

3

画像追加

2020/04/23 09:32

投稿

TN8001
TN8001

スコア9326

test CHANGED
@@ -90,6 +90,10 @@
90
90
 
91
91
 
92
92
 
93
+ ![アプリ画像](48dfdbd6239995da975b45f535963805.png)
94
+
95
+
96
+
93
97
  ```xml
94
98
 
95
99
  <?xml version="1.0"?>

2

AvalonEdit SyntaxHighlighting

2020/04/23 09:32

投稿

TN8001
TN8001

スコア9326

test CHANGED
@@ -49,3 +49,213 @@
49
49
 
50
50
 
51
51
  (なぜバインディングしているか等)もう少し詳しい使用法がわかると、ほかの解決策もあるかもしれません。
52
+
53
+
54
+
55
+ ---
56
+
57
+
58
+
59
+ 追記
60
+
61
+ `AvalonEdit`の`SyntaxHighlighting`をテストしました。
62
+
63
+
64
+
65
+ 専用エディタとしてどんなフォーマットがいいか悩んだのですが、安直にINIファイルにしました^^;
66
+
67
+
68
+
69
+ ##### 強調する構文
70
+
71
+ * コメント(Green)
72
+
73
+ * セクション名(Bold Blue)
74
+
75
+ * キー名(Firebrick)
76
+
77
+ * 最初のイコール(SteelBlue)
78
+
79
+ * 数値(DarkBlue)
80
+
81
+ * bool(DarkCyan)
82
+
83
+ * エラー(Red)
84
+
85
+ * セクション前後の文字
86
+
87
+ * キーなし
88
+
89
+ * イコールなし
90
+
91
+
92
+
93
+ ```xml
94
+
95
+ <?xml version="1.0"?>
96
+
97
+ <SyntaxDefinition name="INI" extensions=".ini" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
98
+
99
+ <Color name="Comment" foreground="Green" />
100
+
101
+ <Color name="Bracket" foreground="Black" />
102
+
103
+ <Color name="Section" foreground="Blue" fontWeight="bold" />
104
+
105
+ <Color name="Key" foreground="Firebrick" />
106
+
107
+ <Color name="Equal" foreground="SteelBlue" />
108
+
109
+ <Color name="TrueFalse" foreground="DarkCyan" />
110
+
111
+ <Color name="NumberLiteral" foreground="DarkBlue" />
112
+
113
+ <Color name="Error" foreground="Red" />
114
+
115
+
116
+
117
+ <RuleSet>
118
+
119
+ <!-- コメント行 -->
120
+
121
+ <Span begin="^;" color="Comment" />
122
+
123
+
124
+
125
+
126
+
127
+ <!-- セクション行 -->
128
+
129
+ <!-- ベースをエラーにして正しい部分だけ色を付ける
130
+
131
+ '='が含まれていなく(パラメータ行ではない)後ろに'['がある行全体
132
+
133
+ "^[^=]*?[" だと'['がErrorに食われてしまうので肯定先読み
134
+
135
+ ".+?(?=])" も同様 ']'をSectionに含めない -->
136
+
137
+ <Span begin="^[^=]*?(?=[)" color="Error" >
138
+
139
+ <RuleSet>
140
+
141
+ <Span begin="[" end="" color="Bracket" />
142
+
143
+ <Span begin="]" end="" color="Bracket" />
144
+
145
+ <Span begin=".+?(?=])" end="" color="Section" />
146
+
147
+ </RuleSet>
148
+
149
+ </Span>
150
+
151
+
152
+
153
+
154
+
155
+ <!-- パラメータ行 -->
156
+
157
+ <!-- キーなし(イコール始まり)はエラー -->
158
+
159
+ <Span begin="^\s*=" color="Error" />
160
+
161
+ <!-- イコールなしはエラー -->
162
+
163
+ <Span begin="^(?!.*=).+$" color="Error" />
164
+
165
+
166
+
167
+ <!-- キー名&初めのイコール -->
168
+
169
+ <!-- まず肯定先読みでイコールの前まで取り色付け
170
+
171
+ 以降をネストのSpanで処理する-->
172
+
173
+ <Span begin="^[^[]*?(?==)" color="Key">
174
+
175
+ <RuleSet>
176
+
177
+ <!-- イコールが先頭で来るのは確定なのでイコール1文字だけ取り色付け
178
+
179
+ 以降をネストのSpanで処理する-->
180
+
181
+ <Span begin="=" color="Equal">
182
+
183
+ <RuleSet>
184
+
185
+ <Import ruleSet="TrueFalse" />
186
+
187
+ <Import ruleSet="NumberLiteral" />
188
+
189
+ <!-- boolでもnumberでもなければ黒に上書き -->
190
+
191
+ <Rule foreground="Black">.</Rule>
192
+
193
+ </RuleSet>
194
+
195
+ </Span>
196
+
197
+ </RuleSet>
198
+
199
+ </Span>
200
+
201
+
202
+
203
+ </RuleSet>
204
+
205
+
206
+
207
+
208
+
209
+ <RuleSet name="TrueFalse" ignoreCase="true">
210
+
211
+ <Keywords color="TrueFalse">
212
+
213
+ <Word>true</Word>
214
+
215
+ <Word>false</Word>
216
+
217
+ </Keywords>
218
+
219
+ </RuleSet>
220
+
221
+
222
+
223
+ <RuleSet name="NumberLiteral">
224
+
225
+ <Keywords color="NumberLiteral">
226
+
227
+ <Word>NaN</Word>
228
+
229
+ </Keywords>
230
+
231
+ <Rule color="NumberLiteral">
232
+
233
+ \b0[xX][0-9a-fA-F]+ # hex number
234
+
235
+ | \b
236
+
237
+ ( \d+(.[0-9]+)? #number with optional floating point
238
+
239
+ | .[0-9]+ #or just starting with floating point
240
+
241
+ )
242
+
243
+ ([eE][+-]?[0-9]+)? # optional exponent
244
+
245
+ </Rule>
246
+
247
+ </RuleSet>
248
+
249
+ </SyntaxDefinition>
250
+
251
+ ```
252
+
253
+ 各言語用のxshdはたくさんあるのですが、キーワード主体で先読み後読みやSpanのネストの例があまり見つからず大変でした^^;
254
+
255
+
256
+
257
+ ついでに`Folding` `Code Completion`も使ってみました。
258
+
259
+ 雑とはいえかなりのコード量になったため、GitHubにあげました。
260
+
261
+ [TN8001/IniEditor: AvalonEdit Syntax Highlighting, Folding and Code Completion example.](https://github.com/TN8001/IniEditor)

1

nameof だとわかりにくいな

2020/04/23 09:28

投稿

TN8001
TN8001

スコア9326

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  var run = new Run { FontFamily = new FontFamily("Meiryo"), FontSize = 14, };
18
18
 
19
- var binding = new Binding(nameof(TEXTCTL)) { Source = DataContext, };
19
+ var binding = new Binding("TEXTCTL") { Source = DataContext, };
20
20
 
21
21
  run.SetBinding(Run.TextProperty, binding);
22
22