private static void WindowPlacementChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { Button ctrl = d as Button; ctrl.Click += ((s, args) => { DependencyObject parent = VisualTreeHelper.GetParent(ctrl); while ((parent as Window) == null) { parent = VisualTreeHelper.GetParent(parent); } Window rootWindow = (Window)parent; NewWindowToShowParameters newWindowParams = ((NewWindowToShowParameters)e.NewValue); Window newWin = newWindowParams.NewWindow; Border b = (Border)rootWindow.FindName(newWindowParams.TargetVisualName); newWin.Width = b.ActualWidth; newWin.Height = b.ActualHeight; Point pt = b.PointToScreen(new Point(0, 0)); PresentationSource source = PresentationSource.FromVisual(rootWindow); System.Windows.Point targetPoints = source.CompositionTarget.TransformFromDevice.Transform(pt); newWin.Top = targetPoints.Y; newWin.Left = targetPoints.X; newWin.Show(); }); }
public static void SetWindowPlacementBehavior(DependencyObject obj, NewWindowToShowParameters value) { obj.SetValue(WindowPlacementBehaviorProperty, value); }