public void RemoveAdorner(IAdorner adorner) { var popup = PopupsDictionary[adorner]; popup.IsOpen = false; PopupsDictionary.Remove(adorner); }
public void AddAdorner(IAdorner adorner) { var popup = new Popup(); var surfaceVisual = Window.Current.Content.TransformToVisual(this); var point = surfaceVisual.TransformPoint(new FoundationPoint(0, 0)); var coreInstance = adorner.GetCoreInstance(); adorner.PropertyChanged += (sender, args) => { // I don't like how this is implemented. Refactor! if (args.PropertyName.Equals("Left")) { popup.HorizontalOffset = adorner.Left - point.X; } if (args.PropertyName.Equals("Top")) { popup.VerticalOffset = adorner.Top - point.Y; } }; var uiElementAdapter = (FrameworkElementAdapter)coreInstance; popup.Child = (UIElement)uiElementAdapter.GetCoreInstance(); popup.HorizontalOffset = adorner.Left - point.X; popup.VerticalOffset = adorner.Top - point.Y; popup.IsOpen = true; PopupsDictionary.Add(adorner, popup); }