diff --git a/demo/Ursa.Demo/Pages/TagInputDemo.axaml b/demo/Ursa.Demo/Pages/TagInputDemo.axaml
index eb5dbfc..dadccf2 100644
--- a/demo/Ursa.Demo/Pages/TagInputDemo.axaml
+++ b/demo/Ursa.Demo/Pages/TagInputDemo.axaml
@@ -21,7 +21,7 @@
diff --git a/src/Ursa/Controls/TagInput/LostFocusBehavior.cs b/src/Ursa/Controls/TagInput/LostFocusBehavior.cs
new file mode 100644
index 0000000..a3d24a7
--- /dev/null
+++ b/src/Ursa/Controls/TagInput/LostFocusBehavior.cs
@@ -0,0 +1,8 @@
+namespace Ursa.Controls;
+
+public enum LostFocusBehavior
+{
+ None,
+ Add,
+ Clear,
+}
\ No newline at end of file
diff --git a/src/Ursa/Controls/TagInput/TagInput.cs b/src/Ursa/Controls/TagInput/TagInput.cs
index aa45ab4..920f01c 100644
--- a/src/Ursa/Controls/TagInput/TagInput.cs
+++ b/src/Ursa/Controls/TagInput/TagInput.cs
@@ -60,9 +60,14 @@ public class TagInput : TemplatedControl
private void OnTextBox_LostFocus(object? sender, RoutedEventArgs e)
{
- if(CleanLostFocus)
+ switch (LostFocusBehavior)
{
- _textBox.Text = "";
+ case LostFocusBehavior.Add:
+ AddTags();
+ break;
+ case LostFocusBehavior.Clear:
+ _textBox.Text = "";
+ break;
}
}
@@ -95,13 +100,13 @@ public class TagInput : TemplatedControl
set => SetValue(SeparatorProperty, value);
}
- public static readonly StyledProperty CleanLostFocusProperty = AvaloniaProperty.Register(
- nameof(CleanLostFocus), defaultValue: false);
+ public static readonly StyledProperty LostFocusBehaviorProperty = AvaloniaProperty.Register(
+ nameof(LostFocusBehavior));
- public bool CleanLostFocus
+ public LostFocusBehavior LostFocusBehavior
{
- get => GetValue(CleanLostFocusProperty);
- set => SetValue(CleanLostFocusProperty, value);
+ get => GetValue(LostFocusBehaviorProperty);
+ set => SetValue(LostFocusBehaviorProperty, value);
}
@@ -222,31 +227,7 @@ public class TagInput : TemplatedControl
{
if (args.Key == Key.Enter)
{
- if (_textBox.Text?.Length > 0)
- {
- string[] values;
- if (!string.IsNullOrEmpty(Separator))
- {
- values = _textBox.Text.Split(new string[] { Separator },
- StringSplitOptions.RemoveEmptyEntries);
- }
- else
- {
- values = new[] { _textBox.Text };
- }
-
- if (!AllowDuplicates && Tags != null)
- values = values.Distinct().Except(Tags).ToArray();
-
- for (int i = 0; i < values.Length; i++)
- {
- int index = Items.Count - 1;
- // Items.Insert(index, values[i]);
- Tags?.Insert(index, values[i]);
- }
-
- _textBox.Text = "";
- }
+ AddTags();
}
else if (args.Key == Key.Delete || args.Key == Key.Back)
{
@@ -262,6 +243,33 @@ public class TagInput : TemplatedControl
}
}
}
+
+ private void AddTags()
+ {
+ if (!(_textBox.Text?.Length > 0)) return;
+ string[] values;
+ if (!string.IsNullOrEmpty(Separator))
+ {
+ values = _textBox.Text.Split(new string[] { Separator },
+ StringSplitOptions.RemoveEmptyEntries);
+ }
+ else
+ {
+ values = new[] { _textBox.Text };
+ }
+
+ if (!AllowDuplicates && Tags != null)
+ values = values.Distinct().Except(Tags).ToArray();
+
+ for (int i = 0; i < values.Length; i++)
+ {
+ int index = Items.Count - 1;
+ // Items.Insert(index, values[i]);
+ Tags?.Insert(index, values[i]);
+ }
+
+ _textBox.Text = "";
+ }
public void Close(object o)
{