private static void ensureAdorner(DependencyObject d, Action <StrokeAdorner> action) { var tb = d as TextBlock; if (tb == null) { throw new Exception("StrokeAdorner only works on TextBlocks"); } EventHandler f = null; f = new EventHandler((o, e) => { var adornerLayer = AdornerLayer.GetAdornerLayer(tb); if (adornerLayer == null) { throw new Exception("AdornerLayer should not be empty"); } var adorners = adornerLayer.GetAdorners(tb); var adorner = adorners == null ? null : adorners.OfType <StrokeAdorner>().FirstOrDefault(); if (adorner == null) { adorner = new StrokeAdorner(tb); adornerLayer.Add(adorner); } tb.LayoutUpdated -= f; action(adorner); }); tb.LayoutUpdated += f; }
public StrokeTextBlock() { _adorner = new StrokeAdorner(this); this.LayoutUpdated += StrokeTextBlock_LayoutUpdated; }