Как лучше всего обновить «TranslatePosition» с Silverlight beta 2 до RC? - PullRequest
0 голосов
/ 30 сентября 2008

Я обновляю приложение silverlight beta 2 до RC0 и имею функцию, которая переводит точку из дочернего элемента в его родительский. Цель этой функции - убедиться, что элемент находится точно над дочерним элементом, даже если они не находятся на одном холсте и не имеют общего родительского элемента.

Вот текущая функция:

    protected Point TranslatePosition(Point current, Panel from, Panel to, MouseEventArgs e)
    {
        Point rtn = new Point(-1, -1);
        // get point relative to existing parent
        Point fromPoint = e.GetPosition(from);
        // get point relative to new parent
        Point toPoint = e.GetPosition(to);

        // calculate delta
        double deltaX = fromPoint.X - toPoint.X;
        double deltaY = fromPoint.Y - toPoint.Y;

        // calculate new position
        rtn = new Point(current.X - deltaX, current.Y - deltaY);

        return rtn;
    }

Обратите внимание, что для получения позиции относительно существующего и нового родителя используется функция MouseEventArgs.GetPosition. В тех случаях, когда MouseEventArgs недоступны, мы создавали новый экземпляр и передавали его. Это был взлом, но, похоже, сработало. Теперь в RC0 конструктор MouseEventArgs является внутренним, поэтому этот хак больше не работает.

Любые идеи о том, как написать метод для перевода точки в RC0, который не полагается на MouseEventArgs.GetPosition?

Ответы [ 2 ]

2 голосов
/ 30 сентября 2008

См. Метод TransformToVisual элемента фреймворка. Он делает именно то, что вам нужно: с учетом другого элемента управления он генерирует новое преобразование, которое отображает координаты точки относительно текущего элемента управления в координаты относительно переданного элемента управления.

var transform = from.TransformToVisual(to);
return transform.Transform(current);
0 голосов
/ 08 февраля 2009

Пока что, но ... Кажется, есть проблема с тем, как конвейер преобразования рендеринга принимает обновления, которые отличаются от того, как он работает в WPF.

Я создал вики-запись на daisley-harrison.com , затем рассказывает об этом. Я превращу его в запись в блоге по адресу blog.daisley-harrison.com , когда обойду позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...