public void DetectPositionPoints() { DependencyObject parent = VisualTreeHelper.GetParent(this); while (!(parent is Grid)) { if (parent == null) { dispatcherTimer.Stop(); return; } parent = VisualTreeHelper.GetParent(parent); } Point position = this.TranslatePoint(new Point(1, 1), (FrameworkElement)parent); //If the focus has not changed position if (OldPoint != null && OldPoint == position) { return; } OldPoint = position; Model.Focus model = this.DataContext as Model.Focus; model.setPoints(new Point(position.X + (this.RenderSize.Width / 2), position.Y + 40), new Point(position.X + (this.RenderSize.Width / 2), position.Y + (this.RenderSize.Height)), new Point(position.X, position.Y + (this.RenderSize.Height / 2)), new Point(position.X + (this.RenderSize.Width), position.Y + (this.RenderSize.Height / 2))); ((FocusGridModel)((FrameworkElement)parent).DataContext).UpdateFocus(model); }
public AddFocusViewModel SetupFlyout(object sender) { Point mousePos = Mouse.GetPosition((IInputElement)sender); Model.Focus focus = new Model.Focus(); focus.setDefaults(); Focus = focus; //minus 0.4 because if you hit the border of a cell, it will add it to the next one... Annoying Focus.X = (int)Math.Floor((mousePos.X / 89) - 0.4); Focus.Y = (int)Math.Floor(mousePos.Y / 140); RaisePropertyChanged("Focus"); return(this); }