diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs
index cdeed6b49b..e7b903edae 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs
@@ -5,15 +5,17 @@
// $Revision$
//
-using ICSharpCode.AvalonEdit.Utils;
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Documents;
+using System.Windows.Media;
using System.Windows.Media.TextFormatting;
using System.Windows.Threading;
+
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Rendering;
+using ICSharpCode.AvalonEdit.Utils;
namespace ICSharpCode.AvalonEdit.Editing
{
@@ -24,7 +26,7 @@ namespace ICSharpCode.AvalonEdit.Editing
{
readonly TextArea textArea;
readonly TextView textView;
- CaretLayer caretAdorner;
+ readonly CaretLayer caretAdorner;
bool visible;
internal Caret(TextArea textArea)
@@ -346,5 +348,13 @@ namespace ICSharpCode.AvalonEdit.Editing
caretAdorner.Hide();
}
}
+
+ ///
+ /// Gets/Sets the color of the caret.
+ ///
+ public Brush CaretBrush {
+ get { return caretAdorner.CaretBrush; }
+ set { caretAdorner.CaretBrush = value; }
+ }
}
}
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretLayer.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretLayer.cs
index 383904a576..2b46b687bf 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretLayer.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretLayer.cs
@@ -7,6 +7,7 @@
using System;
using System.Windows;
+using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
@@ -65,11 +66,16 @@ namespace ICSharpCode.AvalonEdit.Editing
BeginAnimation(OpacityProperty, null);
}
+ internal Brush CaretBrush;
+
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
if (isVisible) {
- drawingContext.DrawRectangle(Brushes.Black, null,
+ Brush caretBrush = this.CaretBrush;
+ if (caretBrush == null)
+ caretBrush = (Brush)textView.GetValue(TextBlock.ForegroundProperty);
+ drawingContext.DrawRectangle(caretBrush, null,
new Rect(caretRectangle.X - textView.HorizontalOffset,
caretRectangle.Y - textView.VerticalOffset,
caretRectangle.Width,
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs
index 703d12fa75..7f7399f2ca 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs
@@ -304,6 +304,11 @@ namespace ICSharpCode.AvalonEdit.Rendering
{
return layers[index];
}
+
+ ///
+ protected override System.Collections.IEnumerator LogicalChildren {
+ get { return layers.GetEnumerator(); }
+ }
#endregion
#region Redraw methods / VisualLine invalidation
@@ -1456,5 +1461,20 @@ namespace ICSharpCode.AvalonEdit.Rendering
throw ThrowUtil.NoDocumentAssigned();
return heightTree.GetLineByVisualPosition(visualTop);
}
+
+ ///
+ protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
+ {
+ base.OnPropertyChanged(e);
+ if (e.Property == Control.ForegroundProperty
+ || e.Property == Control.FontFamilyProperty
+ || e.Property == Control.FontSizeProperty
+ || e.Property == Control.FontStretchProperty
+ || e.Property == Control.FontStyleProperty
+ || e.Property == Control.FontWeightProperty)
+ {
+ Redraw();
+ }
+ }
}
}