1 //----------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 //----------------------------------------------------------------
5 namespace System.Activities.Core.Presentation
7 using System.Activities.Presentation;
8 using System.Activities.Presentation.Model;
9 using System.Activities.Presentation.View;
12 using System.Windows.Controls;
13 using System.Windows.Documents;
14 using System.Windows.Media;
15 using System.Windows.Media.Effects;
17 class FlowchartExpressionAdorner : Adorner
19 string expressionString;
20 bool isTextRightToLeft;
22 public FlowchartExpressionAdorner(UIElement adornedElement)
23 : base(adornedElement)
25 expressionString = GetExpressionString();
26 this.isTextRightToLeft = FreeFormPanelUtilities.IsRightToLeft(adornedElement);
29 protected override void OnRender(DrawingContext drawingContext)
31 Transform transform = isTextRightToLeft ? new MatrixTransform(-1, 0, 0, 1, 0, 0) : Transform.Identity;
32 Border tooltip = new Border
34 Background = new SolidColorBrush(Colors.White),
35 BorderBrush = new SolidColorBrush(WorkflowDesignerColors.WorkflowViewElementBorderColor),
36 BorderThickness = new Thickness(1),
37 CornerRadius = new CornerRadius(4),
38 Margin = new Thickness(10),
41 Margin = new Thickness(4, 0, 4, 0),
43 Text = expressionString,
45 Effect = new DropShadowEffect
51 RenderTransform = transform
53 tooltip.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
55 VisualBrush brush = new VisualBrush()
60 Rect adornedElementRect = new Rect(this.AdornedElement.DesiredSize);
61 Rect tooltipRect = new Rect(adornedElementRect.TopLeft + new Vector(adornedElementRect.Width, -tooltip.DesiredSize.Height), tooltip.DesiredSize);
62 Pen renderPen = new Pen();
63 drawingContext.DrawRectangle(brush, renderPen, tooltipRect);
66 public static string GetExpressionString(UIElement adornedElement)
68 string expressionPropertyName;
70 if (adornedElement is FlowDecisionDesigner)
72 expressionPropertyName = "Condition";
73 modelItem = ((FlowDecisionDesigner)adornedElement).ModelItem;
77 Fx.Assert(adornedElement is FlowSwitchDesigner, "this.AdornedElement is either FlowDecisionDesigner or FlowSwitchDesigner");
78 expressionPropertyName = "Expression";
79 modelItem = ((FlowSwitchDesigner)adornedElement).ModelItem;
81 Activity expressionActivity = modelItem.Properties[expressionPropertyName].ComputedValue as Activity;
82 return ExpressionHelper.GetExpressionString(expressionActivity, modelItem);
85 string GetExpressionString()
87 return GetExpressionString(this.AdornedElement);