Browse Source

Add CaretIndex (#13851)

Co-authored-by: Robert Mutniański <robert.mutnianski@inetum.com>
pull/13865/head
Robert Mutniański 2 years ago
committed by GitHub
parent
commit
8a4c89fe8a
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.Properties.cs
  2. 1
      src/Avalonia.Themes.Fluent/Controls/AutoCompleteBox.xaml
  3. 1
      src/Avalonia.Themes.Simple/Controls/AutoCompleteBox.xaml
  4. 42
      tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs

18
src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.Properties.cs

@ -15,6 +15,15 @@ namespace Avalonia.Controls
{
public partial class AutoCompleteBox
{
/// <summary>
/// Defines see <see cref="TextBox.CaretIndex"/> property.
/// </summary>
public static readonly StyledProperty<int> CaretIndexProperty =
TextBox.CaretIndexProperty.AddOwner<AutoCompleteBox>(new(
defaultValue: 0,
defaultBindingMode:BindingMode.TwoWay,
coerce: TextBox.CoerceCaretIndex));
public static readonly StyledProperty<string?> WatermarkProperty =
TextBox.WatermarkProperty.AddOwner<AutoCompleteBox>();
@ -158,6 +167,15 @@ namespace Avalonia.Controls
AvaloniaProperty.Register<AutoCompleteBox, Func<string?, CancellationToken, Task<IEnumerable<object>>>?>(
nameof(AsyncPopulator));
/// <summary>
/// Gets or sets the caret index
/// </summary>
public int CaretIndex
{
get => GetValue(CaretIndexProperty);
set => SetValue(CaretIndexProperty, value);
}
/// <summary>
/// Gets or sets the minimum number of characters required to be entered
/// in the text box before the <see cref="AutoCompleteBox" /> displays possible matches.

1
src/Avalonia.Themes.Fluent/Controls/AutoCompleteBox.xaml

@ -42,6 +42,7 @@
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius}"
CaretIndex="{TemplateBinding CaretIndex, Mode=TwoWay}"
FontSize="{TemplateBinding FontSize}"
FontFamily="{TemplateBinding FontFamily}"
FontWeight="{TemplateBinding FontWeight}"

1
src/Avalonia.Themes.Simple/Controls/AutoCompleteBox.xaml

@ -16,6 +16,7 @@
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius}"
CaretIndex="{TemplateBinding CaretIndex, Mode=TwoWay}"
DataValidationErrors.Errors="{TemplateBinding (DataValidationErrors.Errors)}"
Watermark="{TemplateBinding Watermark}" />

42
tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs

@ -456,6 +456,45 @@ namespace Avalonia.Controls.UnitTests
});
}
[Fact]
public void CaretIndex_Changes()
{
string text = "Sample text";
string expectedText = "Saple text";
RunTest((control, textbox) =>
{
control.Text = text;
control.Measure(Size.Infinity);
Dispatcher.UIThread.RunJobs();
textbox.RaiseEvent(new KeyEventArgs
{
RoutedEvent = InputElement.KeyDownEvent,
Key = Key.Right
});
Dispatcher.UIThread.RunJobs();
Assert.Equal(1, control.CaretIndex);
Assert.Equal(textbox.CaretIndex, control.CaretIndex);
control.CaretIndex = 3;
Assert.Equal(3, control.CaretIndex);
Assert.Equal(textbox.CaretIndex, control.CaretIndex);
textbox.RaiseEvent(new KeyEventArgs
{
RoutedEvent = InputElement.KeyDownEvent,
Key = Key.Back
});
Dispatcher.UIThread.RunJobs();
Assert.Equal(2, control.CaretIndex);
Assert.Equal(textbox.CaretIndex, control.CaretIndex);
Assert.True(control.Text == expectedText && textbox.Text == expectedText);
});
}
/// <summary>
/// Retrieves a defined predicate filter through a new AutoCompleteBox
/// control instance.
@ -1111,7 +1150,8 @@ namespace Avalonia.Controls.UnitTests
var textBox =
new TextBox
{
Name = "PART_TextBox"
Name = "PART_TextBox",
[!!TextBox.CaretIndexProperty] = control[!!AutoCompleteBox.CaretIndexProperty]
}.RegisterInNameScope(scope);
var listbox =
new ListBox

Loading…
Cancel
Save