protected override void OnRender(DrawingContext drawingContext) { Rect adornedElementRect = new Rect(this.AdornedElement.DesiredSize); SolidColorBrush renderBrush = (SolidColorBrush)Application.Current.Resources["AdornerDiagramBrush"]; renderBrush.Opacity = 0.5; DroppingElementAdornerType adornertype = (this.AdornedElement as Controls.ConnectionDiagramBase)?.AdornerType ?? DroppingElementAdornerType.DrawEllipse; Pen renderPen = new Pen((SolidColorBrush)Application.Current.Resources["AdornerDiagramBrush"], 1.5); double renderRadius = 5.0; if (DroppingElementAdornerType.DrawEllipse.Equals(adornertype)) { // Draw a circle at each corner. drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopLeft, renderRadius, renderRadius); drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopRight, renderRadius, renderRadius); drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomLeft, renderRadius, renderRadius); drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomRight, renderRadius, renderRadius); } else if (DroppingElementAdornerType.DrawLine.Equals(adornertype)) { renderPen.DashStyle = DashStyles.Dash; renderPen.Thickness = 6.0; drawingContext.DrawLine(renderPen, adornedElementRect.TopLeft, adornedElementRect.TopRight); drawingContext.DrawLine(renderPen, adornedElementRect.TopLeft, adornedElementRect.BottomLeft); drawingContext.DrawLine(renderPen, adornedElementRect.TopRight, adornedElementRect.BottomRight); drawingContext.DrawLine(renderPen, adornedElementRect.BottomLeft, adornedElementRect.BottomRight); } else { //TODO:Extention } }
/// <summary> /// Sets the value of the AdornerType attached property /// for a given dependency object. /// </summary> /// <param name="obj">The object to which the property value /// is written.</param> /// <param name="value">Sets the AdornerType value of the specified object.</param> public static void SetAdornerType(DependencyObject obj, DroppingElementAdornerType value) { obj.SetValue(AdornerTypeProperty, value); }
protected override void OnRender(DrawingContext drawingContext) { Rect adornedElementRect = new Rect(this.AdornedElement.DesiredSize); SolidColorBrush renderBrush = (SolidColorBrush)Application.Current.Resources["AdornerPanelBrush"]; renderBrush.Opacity = 0.5; Pen renderPen = new Pen((SolidColorBrush)Application.Current.Resources["AdornerPanelBrush"], 1.5); double renderRadius = 5.0; DroppingElementAdornerType adornertype = DiagramElementDropBehavior.GetAdornerType(this.AdornedElement); if (DroppingElementAdornerType.DrawEllipse.Equals(adornertype)) { // Draw a circle at each corner. drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopLeft, renderRadius, renderRadius); drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopRight, renderRadius, renderRadius); drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomLeft, renderRadius, renderRadius); drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomRight, renderRadius, renderRadius); } else if (DroppingElementAdornerType.DrawLine.Equals(adornertype)) { renderPen.DashStyle = DashStyles.DashDot; renderPen.Thickness = renderRadius; drawingContext.DrawLine(renderPen, adornedElementRect.TopLeft, adornedElementRect.TopRight); drawingContext.DrawLine(renderPen, adornedElementRect.TopLeft, adornedElementRect.BottomLeft); drawingContext.DrawLine(renderPen, adornedElementRect.TopRight, adornedElementRect.BottomRight); drawingContext.DrawLine(renderPen, adornedElementRect.BottomLeft, adornedElementRect.BottomRight); } else { //get the custom adorner from drop element UIElement uc = DiagramElementDropBehavior.GetCustomAdornerContent(this.AdornedElement); // Create the visual brush based on the UserControl VisualBrush vb = new VisualBrush(uc); //get the alignment HorizontalAlignment horizon = (HorizontalAlignment)uc.GetValue(HorizontalAlignmentProperty); VerticalAlignment vertical = (VerticalAlignment)uc.GetValue(VerticalAlignmentProperty); if (horizon == HorizontalAlignment.Left) { drawingContext.DrawRectangle(vb, null, new Rect(0, 0, renderRadius, ActualHeight)); } else if (horizon == HorizontalAlignment.Right) { drawingContext.DrawRectangle(vb, null, new Rect(ActualWidth, 0, renderRadius, ActualHeight)); } else if (vertical == VerticalAlignment.Center) { drawingContext.DrawRectangle(vb, null, new Rect(ActualWidth / 2, 0, renderRadius, ActualHeight)); } if (vertical == VerticalAlignment.Bottom) { drawingContext.DrawRectangle(vb, null, new Rect(0, ActualHeight, ActualWidth, renderRadius)); } else if (vertical == VerticalAlignment.Top) { drawingContext.DrawRectangle(vb, null, new Rect(0, 0, ActualWidth, renderRadius)); } else if (vertical == VerticalAlignment.Center) { drawingContext.DrawRectangle(vb, null, new Rect(0, ActualWidth / 2, ActualWidth, renderRadius)); } if (vertical == VerticalAlignment.Stretch && horizon == HorizontalAlignment.Stretch) { drawingContext.DrawRectangle(vb, null, new Rect(0, 0, renderRadius, ActualHeight)); drawingContext.DrawRectangle(vb, null, new Rect(ActualWidth - renderRadius, 0, renderRadius, ActualHeight)); drawingContext.DrawRectangle(vb, null, new Rect(0, ActualHeight - renderRadius, ActualWidth, renderRadius)); drawingContext.DrawRectangle(vb, null, new Rect(0, 0, ActualWidth, renderRadius)); } //// Draw using the visual brush in the rect at 10,10,100,25 ////var grayBrush = renderBrush; ////left ////drawingContext.DrawRectangle(grayBrush, null, new System.Windows.Rect(1, 1, 5, ActualHeight)); ////right ////drawingContext.DrawRectangle(grayBrush, null, new System.Windows.Rect(ActualWidth - 6, 1, 5, ActualHeight)); ////bottom ////drawingContext.DrawRectangle(grayBrush, null, new System.Windows.Rect(1, ActualHeight, ActualWidth - 2, 5)); } }