diff --git a/samples/ControlCatalog/Pages/TextBoxPage.xaml b/samples/ControlCatalog/Pages/TextBoxPage.xaml
index 0c0a4d705b..877875a2e1 100644
--- a/samples/ControlCatalog/Pages/TextBoxPage.xaml
+++ b/samples/ControlCatalog/Pages/TextBoxPage.xaml
@@ -26,6 +26,7 @@
+
diff --git a/src/Avalonia.Controls/Presenters/TextPresenter.cs b/src/Avalonia.Controls/Presenters/TextPresenter.cs
index fbdf885709..2626b67bfc 100644
--- a/src/Avalonia.Controls/Presenters/TextPresenter.cs
+++ b/src/Avalonia.Controls/Presenters/TextPresenter.cs
@@ -19,6 +19,9 @@ namespace Avalonia.Controls.Presenters
public static readonly StyledProperty PasswordCharProperty =
AvaloniaProperty.Register(nameof(PasswordChar));
+ public static readonly StyledProperty CaretBrushProperty =
+ AvaloniaProperty.Register(nameof(CaretBrushProperty));
+
public static readonly DirectProperty SelectionStartProperty =
TextBox.SelectionStartProperty.AddOwner(
o => o.SelectionStart,
@@ -35,7 +38,7 @@ namespace Avalonia.Controls.Presenters
private int _selectionEnd;
private bool _caretBlink;
private IBrush _highlightBrush;
-
+
static TextPresenter()
{
AffectsRender(PasswordCharProperty);
@@ -79,6 +82,12 @@ namespace Avalonia.Controls.Presenters
set => SetValue(PasswordCharProperty, value);
}
+ public IBrush CaretBrush
+ {
+ get => GetValue(CaretBrushProperty);
+ set => SetValue(CaretBrushProperty, value);
+ }
+
public int SelectionStart
{
get
@@ -144,16 +153,21 @@ namespace Avalonia.Controls.Presenters
if (selectionStart == selectionEnd)
{
- var backgroundColor = (((Control)TemplatedParent).GetValue(BackgroundProperty) as SolidColorBrush)?.Color;
- var caretBrush = Brushes.Black;
+ var caretBrush = CaretBrush;
- if (backgroundColor.HasValue)
+ if (caretBrush is null)
{
- byte red = (byte)~(backgroundColor.Value.R);
- byte green = (byte)~(backgroundColor.Value.G);
- byte blue = (byte)~(backgroundColor.Value.B);
-
- caretBrush = new SolidColorBrush(Color.FromRgb(red, green, blue));
+ var backgroundColor = (((Control)TemplatedParent).GetValue(BackgroundProperty) as SolidColorBrush)?.Color;
+ if (backgroundColor.HasValue)
+ {
+ byte red = (byte)~(backgroundColor.Value.R);
+ byte green = (byte)~(backgroundColor.Value.G);
+ byte blue = (byte)~(backgroundColor.Value.B);
+
+ caretBrush = new SolidColorBrush(Color.FromRgb(red, green, blue));
+ }
+ else
+ caretBrush = Brushes.Black;
}
if (_caretBlink)
diff --git a/src/Avalonia.Controls/TextBox.cs b/src/Avalonia.Controls/TextBox.cs
index d43957313e..f67b6e54a5 100644
--- a/src/Avalonia.Controls/TextBox.cs
+++ b/src/Avalonia.Controls/TextBox.cs
@@ -38,6 +38,9 @@ namespace Avalonia.Controls
public static readonly StyledProperty PasswordCharProperty =
AvaloniaProperty.Register(nameof(PasswordChar));
+ public static readonly StyledProperty CaretBrushProperty =
+ AvaloniaProperty.Register(nameof(CaretBrushProperty));
+
public static readonly DirectProperty SelectionStartProperty =
AvaloniaProperty.RegisterDirect(
nameof(SelectionStart),
@@ -169,6 +172,12 @@ namespace Avalonia.Controls
set => SetValue(PasswordCharProperty, value);
}
+ public IBrush CaretBrush
+ {
+ get => GetValue(CaretBrushProperty);
+ set => SetValue(CaretBrushProperty, value);
+ }
+
public int SelectionStart
{
get
diff --git a/src/Avalonia.Themes.Default/TextBox.xaml b/src/Avalonia.Themes.Default/TextBox.xaml
index 6741bdc7d9..a82ea1289b 100644
--- a/src/Avalonia.Themes.Default/TextBox.xaml
+++ b/src/Avalonia.Themes.Default/TextBox.xaml
@@ -44,7 +44,8 @@
SelectionEnd="{TemplateBinding SelectionEnd}"
TextAlignment="{TemplateBinding TextAlignment}"
TextWrapping="{TemplateBinding TextWrapping}"
- PasswordChar="{TemplateBinding PasswordChar}"/>
+ PasswordChar="{TemplateBinding PasswordChar}"
+ CaretBrush="{TemplateBinding CaretBrush}"/>