feat: add separator.

This commit is contained in:
rabbitism
2024-01-31 11:33:42 +08:00
parent dc3d9feebe
commit 90dd1a3ff4
3 changed files with 16 additions and 5 deletions

View File

@@ -6,7 +6,7 @@
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Ursa.Demo.Pages.ClassInputDemo">
<StackPanel HorizontalAlignment="Left" Spacing="20">
<u:ControlClassesInput Name="input" />
<u:ControlClassesInput Name="input" Separator=" " />
<Button u:ControlClassesInput.Source="{Binding #input}" Content="Hello Panda" />
<Button u:ControlClassesInput.Source="{Binding #input}" Content="Hello Panda" />
<Button u:ControlClassesInput.Source="{Binding #input}" Content="Hello Panda" />

View File

@@ -7,7 +7,11 @@
<Setter Property="Width" Value="200" />
<Setter Property="Template">
<ControlTemplate TargetType="u:ControlClassesInput">
<u:TagInput HorizontalAlignment="Stretch" AllowDuplicates="False" Tags="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TargetClasses, Mode=TwoWay}" />
<u:TagInput
HorizontalAlignment="Stretch"
AllowDuplicates="False"
Separator="{TemplateBinding Separator}"
Tags="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TargetClasses, Mode=TwoWay}" />
</ControlTemplate>
</Setter>
<!--

View File

@@ -24,6 +24,15 @@ public class ControlClassesInput: TemplatedControl
set => SetValue(TargetProperty, value);
}
public static readonly StyledProperty<string> SeparatorProperty =
TagInput.SeparatorProperty.AddOwner<ControlClassesInput>();
public string Separator
{
get => GetValue(SeparatorProperty);
set => SetValue(SeparatorProperty, value);
}
private ObservableCollection<string> _targetClasses;
@@ -44,7 +53,7 @@ public class ControlClassesInput: TemplatedControl
static ControlClassesInput()
{
TargetClassesProperty.Changed.AddClassHandler<ControlClassesInput, ObservableCollection<string>?>((o,e)=>o.OnClassesChanged(e));
TargetClassesProperty.Changed.AddClassHandler<ControlClassesInput, ObservableCollection<string>>((o,e)=>o.OnClassesChanged(e));
SourceProperty.Changed.AddClassHandler<StyledElement, ControlClassesInput?>(HandleSourceChange);
}
@@ -67,8 +76,6 @@ public class ControlClassesInput: TemplatedControl
newControl._targets.Remove(oldControl);
}
}
private static readonly char[] _separators = {' ', '\t', '\n', '\r'};
private void OnClassesChanged(AvaloniaPropertyChangedEventArgs<ObservableCollection<string>?> args)
{