private void SetHighlightCurrentLineBackground(SolidColorBrush brush) { try { var oldRenderer = null as HighlightCurrentLineBackgroundRenderer; foreach (var item in this.TextArea.TextView.BackgroundRenderers) { if (item != null && item is HighlightCurrentLineBackgroundRenderer) { oldRenderer = item as HighlightCurrentLineBackgroundRenderer; } } this.TextArea.TextView.BackgroundRenderers.Remove(oldRenderer); if (this._currentLineRenderer != null) { if (this.TextArea.TextView.BackgroundRenderers.Contains(this._currentLineRenderer)) { this.TextArea.TextView.BackgroundRenderers.Remove(this._currentLineRenderer); } this._currentLineRenderer = null; } this._currentLineRenderer = new HighlightCurrentLineBackgroundRenderer(this, brush.Clone()); this.TextArea.TextView.BackgroundRenderers.Add(this._currentLineRenderer); } catch (Exception ex) { Debug.WriteLine(ex); } }
/// <summary> /// Reset the <seealso cref="SolidColorBrush"/> to be used for highlighting the current editor line. /// </summary> private void AdjustCurrentLineBackground() { HighlightCurrentLineBackgroundRenderer oldRenderer = null; // Make sure there is only one of this type of background renderer // Otherwise, we might keep adding and WPF keeps drawing them on top of each other foreach (var item in this.TextArea.TextView.BackgroundRenderers) { if (item != null) { if (item is HighlightCurrentLineBackgroundRenderer) { oldRenderer = item as HighlightCurrentLineBackgroundRenderer; } } } if (oldRenderer != null) { this.TextArea.TextView.BackgroundRenderers.Remove(oldRenderer); } this.TextArea.TextView.BackgroundRenderers.Add(new HighlightCurrentLineBackgroundRenderer(this)); }