private void AddToGrid(Controls.LayerFrame frame, bool canResize) { Grid.Children.Add(frame); Panel.SetZIndex(frame, 0); var layer = AdornerLayer.GetAdornerLayer(frame); var adorner = new OverlayPositionAdorner(frame, canResize); layer.Add(adorner); adorner.PositionUpdated += frame.RaisePositionChanged; }
private Controls.LayerFrame Generate(PositionedOverlaySettings settings, string text, Color backgroundColor) { var control = new Controls.LayerFrame { Border = { Background = new SolidColorBrush(backgroundColor) }, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top, Label = { Content = text, Foreground = new SolidColorBrush(Colors.White) } }; void Update() { int left = 0, top = 0, right = 0, bottom = 0; switch (settings.HorizontalAlignment) { case Alignment.Start: control.HorizontalAlignment = HorizontalAlignment.Left; left = settings.X; break; case Alignment.Center: control.HorizontalAlignment = HorizontalAlignment.Center; left = settings.X; break; case Alignment.End: control.HorizontalAlignment = HorizontalAlignment.Right; right = settings.X; break; } switch (settings.VerticalAlignment) { case Alignment.Start: control.VerticalAlignment = VerticalAlignment.Top; top = settings.Y; break; case Alignment.Center: control.VerticalAlignment = VerticalAlignment.Center; top = settings.Y; break; case Alignment.End: control.VerticalAlignment = VerticalAlignment.Bottom; bottom = settings.Y; break; } Dispatcher.Invoke(() => control.Margin = new Thickness(left, top, right, bottom)); } settings.PropertyChanged += (s, e) => Update(); Update(); control.PositionUpdated += rect => { settings.X = (int)rect.X; settings.Y = (int)rect.Y; }; return(control); }