private static void RenderCurrentBoundary([NotNull] BoundaryChangedEventArgs args, [NotNull] Canvas drawCanvas) { var boundary = args.Boundary; var top = boundary.BoundingRect.Top; if (top.IsMinValue()) { return; } Action <List <Boundary.Step> > render = steps => { foreach (var step in steps) { drawCanvas.Children.Add(new Line { X1 = step.X, Y1 = step.Top, X2 = step.X, Y2 = step.Bottom, Stroke = new SolidColorBrush(Colors.Red), StrokeThickness = 2 }); } }; render(boundary.Left); render(boundary.Right); }
private void StateBoundaryChanged(object sender, BoundaryChangedEventArgs args) { if (args.State.CurrentOperation > LayoutState.Operation.VerticalLayout && args.State.CurrentOperation < LayoutState.Operation.Completed) { Dispatcher.RunAsync(CoreDispatcherPriority.High, () => { FireListViewPropertyChanged(m_diagram.VisualTree); RenderBoxes(m_diagram.VisualTree, DrawCanvas); RenderCurrentBoundary(args, DrawCanvas); }); // wait until user releases the wait handle try { m_progressWaitHandle?.WaitOne(); } catch (ObjectDisposedException) { // silently exit if this wait handle is not longer valid args.State.BoundaryChanged -= StateBoundaryChanged; args.State.OperationChanged -= StateOperationChanged; } } }