Skip to content

Commit b1ae5ad

Browse files
committed
Moves attached behavior to extension class
Separates the attached behavior logic into a dedicated extension class for better organization and clarity. This enhances code maintainability and promotes reusability of the attached behavior functionality.
1 parent f5cd08b commit b1ae5ad

File tree

2 files changed

+118
-113
lines changed

2 files changed

+118
-113
lines changed

RegexDialog/UIHelpers/Behaviors/RoslynCompletionBehavior.cs

Lines changed: 0 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using ICSharpCode.AvalonEdit.CodeCompletion;
33
using RegexDialog.Services;
44
using System;
5-
using System.Collections.Generic;
65
using System.Diagnostics;
76
using System.Linq;
87
using System.Threading.Tasks;
@@ -193,116 +192,4 @@ public void Detach()
193192
}
194193
}
195194
}
196-
197-
// Attached behavior pour l'utilisation en XAML
198-
public static class RoslynCompletionBehaviorExtension
199-
{
200-
private static readonly Dictionary<TextEditor, RoslynCompletionBehavior> _behaviors = [];
201-
202-
private static readonly Dictionary<TextEditor, RoslynSignatureHelpBehavior> _signatureHelpBehaviors = [];
203-
204-
public static RoslynCompletionBehavior GetBehaviorForEditor(TextEditor editor) => _behaviors.TryGetValue(editor, out RoslynCompletionBehavior behavior) ? behavior : null;
205-
206-
public static RoslynSignatureHelpBehavior GetSignatureHelpBehaviorForEditor(TextEditor editor) => _signatureHelpBehaviors.TryGetValue(editor, out RoslynSignatureHelpBehavior behavior) ? behavior : null;
207-
208-
#region EnableCompletion Property
209-
210-
public static readonly DependencyProperty EnableCompletionProperty =
211-
DependencyProperty.RegisterAttached(
212-
"EnableCompletion",
213-
typeof(bool),
214-
typeof(RoslynCompletionBehaviorExtension),
215-
new PropertyMetadata(false, OnEnableCompletionChanged));
216-
217-
public static bool GetEnableCompletion(DependencyObject obj)
218-
{
219-
return (bool)obj.GetValue(EnableCompletionProperty);
220-
}
221-
222-
public static void SetEnableCompletion(DependencyObject obj, bool value)
223-
{
224-
obj.SetValue(EnableCompletionProperty, value);
225-
}
226-
227-
#endregion
228-
229-
#region TemplateCode Property
230-
231-
public static readonly DependencyProperty TemplateCodeProperty =
232-
DependencyProperty.RegisterAttached(
233-
"TemplateCode",
234-
typeof(string),
235-
typeof(RoslynCompletionBehaviorExtension),
236-
new PropertyMetadata(string.Empty, OnTemplateCodeChanged));
237-
238-
public static string GetTemplateCode(DependencyObject obj)
239-
{
240-
return (string)obj.GetValue(TemplateCodeProperty);
241-
}
242-
243-
public static void SetTemplateCode(DependencyObject obj, string value)
244-
{
245-
obj.SetValue(TemplateCodeProperty, value);
246-
}
247-
248-
#endregion
249-
250-
private static void OnEnableCompletionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
251-
{
252-
if (d is not TextEditor editor)
253-
{
254-
return;
255-
}
256-
257-
var enableCompletion = (bool)e.NewValue;
258-
var templateCode = GetTemplateCode(editor);
259-
260-
if (enableCompletion)
261-
{
262-
if (!_behaviors.ContainsKey(editor))
263-
{
264-
var behavior = new RoslynCompletionBehavior(editor, templateCode);
265-
_behaviors[editor] = behavior;
266-
}
267-
268-
if (!_signatureHelpBehaviors.ContainsKey(editor))
269-
{
270-
var signatureHelpBehavior = new RoslynSignatureHelpBehavior(editor, templateCode);
271-
_signatureHelpBehaviors[editor] = signatureHelpBehavior;
272-
}
273-
}
274-
else
275-
{
276-
if (_behaviors.TryGetValue(editor, out var behavior))
277-
{
278-
behavior.Detach();
279-
_behaviors.Remove(editor);
280-
}
281-
282-
if (_signatureHelpBehaviors.TryGetValue(editor, out var signatureHelpBehavior))
283-
{
284-
signatureHelpBehavior.Detach();
285-
_signatureHelpBehaviors.Remove(editor);
286-
}
287-
}
288-
}
289-
290-
private static void OnTemplateCodeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
291-
{
292-
if (d is not TextEditor editor)
293-
{
294-
return;
295-
}
296-
297-
if (_behaviors.TryGetValue(editor, out var behavior))
298-
{
299-
behavior.UpdateTemplateCode((string)e.NewValue);
300-
}
301-
302-
if (_signatureHelpBehaviors.TryGetValue(editor, out var signatureHelpBehavior))
303-
{
304-
signatureHelpBehavior.UpdateTemplateCode((string)e.NewValue);
305-
}
306-
}
307-
}
308195
}
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
using ICSharpCode.AvalonEdit;
2+
using System.Collections.Generic;
3+
using System.Windows;
4+
5+
namespace RegexDialog.Behaviors
6+
{
7+
// Attached behavior pour l'utilisation en XAML
8+
public static class RoslynCompletionBehaviorExtension
9+
{
10+
private static readonly Dictionary<TextEditor, RoslynCompletionBehavior> _behaviors = [];
11+
12+
private static readonly Dictionary<TextEditor, RoslynSignatureHelpBehavior> _signatureHelpBehaviors = [];
13+
14+
public static RoslynCompletionBehavior GetBehaviorForEditor(TextEditor editor) => _behaviors.TryGetValue(editor, out RoslynCompletionBehavior behavior) ? behavior : null;
15+
16+
public static RoslynSignatureHelpBehavior GetSignatureHelpBehaviorForEditor(TextEditor editor) => _signatureHelpBehaviors.TryGetValue(editor, out RoslynSignatureHelpBehavior behavior) ? behavior : null;
17+
18+
#region EnableCompletion Property
19+
20+
public static readonly DependencyProperty EnableCompletionProperty =
21+
DependencyProperty.RegisterAttached(
22+
"EnableCompletion",
23+
typeof(bool),
24+
typeof(RoslynCompletionBehaviorExtension),
25+
new PropertyMetadata(false, OnEnableCompletionChanged));
26+
27+
public static bool GetEnableCompletion(DependencyObject obj)
28+
{
29+
return (bool)obj.GetValue(EnableCompletionProperty);
30+
}
31+
32+
public static void SetEnableCompletion(DependencyObject obj, bool value)
33+
{
34+
obj.SetValue(EnableCompletionProperty, value);
35+
}
36+
37+
#endregion
38+
39+
#region TemplateCode Property
40+
41+
public static readonly DependencyProperty TemplateCodeProperty =
42+
DependencyProperty.RegisterAttached(
43+
"TemplateCode",
44+
typeof(string),
45+
typeof(RoslynCompletionBehaviorExtension),
46+
new PropertyMetadata(string.Empty, OnTemplateCodeChanged));
47+
48+
public static string GetTemplateCode(DependencyObject obj)
49+
{
50+
return (string)obj.GetValue(TemplateCodeProperty);
51+
}
52+
53+
public static void SetTemplateCode(DependencyObject obj, string value)
54+
{
55+
obj.SetValue(TemplateCodeProperty, value);
56+
}
57+
58+
#endregion
59+
60+
private static void OnEnableCompletionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
61+
{
62+
if (d is not TextEditor editor)
63+
{
64+
return;
65+
}
66+
67+
var enableCompletion = (bool)e.NewValue;
68+
var templateCode = GetTemplateCode(editor);
69+
70+
if (enableCompletion)
71+
{
72+
if (!_behaviors.ContainsKey(editor))
73+
{
74+
var behavior = new RoslynCompletionBehavior(editor, templateCode);
75+
_behaviors[editor] = behavior;
76+
}
77+
78+
if (!_signatureHelpBehaviors.ContainsKey(editor))
79+
{
80+
var signatureHelpBehavior = new RoslynSignatureHelpBehavior(editor, templateCode);
81+
_signatureHelpBehaviors[editor] = signatureHelpBehavior;
82+
}
83+
}
84+
else
85+
{
86+
if (_behaviors.TryGetValue(editor, out var behavior))
87+
{
88+
behavior.Detach();
89+
_behaviors.Remove(editor);
90+
}
91+
92+
if (_signatureHelpBehaviors.TryGetValue(editor, out var signatureHelpBehavior))
93+
{
94+
signatureHelpBehavior.Detach();
95+
_signatureHelpBehaviors.Remove(editor);
96+
}
97+
}
98+
}
99+
100+
private static void OnTemplateCodeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
101+
{
102+
if (d is not TextEditor editor)
103+
{
104+
return;
105+
}
106+
107+
if (_behaviors.TryGetValue(editor, out var behavior))
108+
{
109+
behavior.UpdateTemplateCode((string)e.NewValue);
110+
}
111+
112+
if (_signatureHelpBehaviors.TryGetValue(editor, out var signatureHelpBehavior))
113+
{
114+
signatureHelpBehavior.UpdateTemplateCode((string)e.NewValue);
115+
}
116+
}
117+
}
118+
}

0 commit comments

Comments
 (0)