Browse Source

EnhancedScrollBar: put TrackAdorner into the track grid instead of using the adorner layer. This prevents the issue markers from getting lost when switching view contents.

pull/45/merge
Daniel Grunwald 12 years ago
parent
commit
11f74b1d1e
  1. 25
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/EnhancedScrollBar.cs

25
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/EnhancedScrollBar.cs

@ -83,16 +83,19 @@ namespace ICSharpCode.AvalonEdit.AddIn
Grid grid = VisualTreeHelper.GetParent(track) as Grid; Grid grid = VisualTreeHelper.GetParent(track) as Grid;
if (grid != null) { if (grid != null) {
trackBackground = new TrackBackground(this); trackBackground = new TrackBackground(this);
trackAdorner = new TrackAdorner(this);
Grid.SetColumn(trackBackground, Grid.GetColumn(track)); Grid.SetColumn(trackBackground, Grid.GetColumn(track));
Grid.SetRow(trackBackground, Grid.GetRow(track)); Grid.SetRow(trackBackground, Grid.GetRow(track));
Grid.SetColumnSpan(trackBackground, Grid.GetColumnSpan(track)); Grid.SetColumnSpan(trackBackground, Grid.GetColumnSpan(track));
Grid.SetRowSpan(trackBackground, Grid.GetRowSpan(track)); Grid.SetRowSpan(trackBackground, Grid.GetRowSpan(track));
Grid.SetColumn(trackAdorner, Grid.GetColumn(track));
Grid.SetRow(trackAdorner, Grid.GetRow(track));
Grid.SetColumnSpan(trackAdorner, Grid.GetColumnSpan(track));
Grid.SetRowSpan(trackAdorner, Grid.GetRowSpan(track));
Panel.SetZIndex(track, 1); Panel.SetZIndex(track, 1);
Panel.SetZIndex(trackAdorner, 2);
grid.Children.Add(trackBackground); grid.Children.Add(trackBackground);
} grid.Children.Add(trackAdorner);
AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(track);
if (adornerLayer != null) {
trackAdorner = new TrackAdorner(this, adornerLayer, track);
} }
} }
#endregion #endregion
@ -205,8 +208,9 @@ namespace ICSharpCode.AvalonEdit.AddIn
#endregion #endregion
#region TrackAdorner #region TrackAdorner
sealed class TrackAdorner : Adorner sealed class TrackAdorner : FrameworkElement
{ {
#region TriangleGeometry
static readonly StreamGeometry triangleGeometry = CreateTriangleGeometry(); static readonly StreamGeometry triangleGeometry = CreateTriangleGeometry();
static StreamGeometry CreateTriangleGeometry() static StreamGeometry CreateTriangleGeometry()
@ -223,29 +227,28 @@ namespace ICSharpCode.AvalonEdit.AddIn
triangleGeometry.Freeze(); triangleGeometry.Freeze();
return triangleGeometry; return triangleGeometry;
} }
#endregion
readonly AdornerLayer adornerLayer;
readonly TextEditor editor; readonly TextEditor editor;
readonly TextMarkerService textMarkerService; readonly TextMarkerService textMarkerService;
public TrackAdorner(EnhancedScrollBar enhanchedScrollBar, AdornerLayer adornerLayer, UIElement adornedElement) public TrackAdorner(EnhancedScrollBar enhanchedScrollBar)
: base(adornedElement)
{ {
this.adornerLayer = adornerLayer;
this.editor = enhanchedScrollBar.editor; this.editor = enhanchedScrollBar.editor;
this.textMarkerService = enhanchedScrollBar.textMarkerService; this.textMarkerService = enhanchedScrollBar.textMarkerService;
this.Cursor = Cursors.Hand; this.Cursor = Cursors.Hand;
this.ToolTip = string.Empty; this.ToolTip = string.Empty;
adornerLayer.Add(this);
textMarkerService.RedrawRequested += textMarkerService_RedrawRequested; textMarkerService.RedrawRequested += textMarkerService_RedrawRequested;
} }
public void Remove() public void Remove()
{ {
textMarkerService.RedrawRequested -= textMarkerService_RedrawRequested; textMarkerService.RedrawRequested -= textMarkerService_RedrawRequested;
adornerLayer.Remove(this);
Grid grid = (Grid)VisualTreeHelper.GetParent(this);
grid.Children.Remove(this);
} }
void textMarkerService_RedrawRequested(object sender, EventArgs e) void textMarkerService_RedrawRequested(object sender, EventArgs e)

Loading…
Cancel
Save