Перевод X, Y Координата - PullRequest
1 голос
/ 25 июня 2010

В настоящее время у меня есть пользовательский элемент управления, который содержит элементы, которые имеют определенную координату X, Y, и существуют пределы того, в пределах которых эти точки должны находиться.В этом случае эти позиции 0> X> 40 и 0> Y> 80 (40x80).Элемент управления, в котором я размещаю эти элементы, является динамическим, но имеет определенное соотношение сторон в зависимости от размера окна.Мне нужно перевести эти координаты X & Y в относительные места в пользовательском элементе управления.Любая помощь очень ценится!Заранее спасибо!Если это важно / помогает, я использую Silverlight.

1 Ответ

4 голосов
/ 28 июня 2010

вы можете использовать GeneralTransform, чтобы определить позицию UIElement относительно контейнера. Вот фрагмент кода:

    /// <summary>
    /// Gets the position of the specified element's top left corner, relative to the specified container.
    /// </summary>
    /// <param name="element"></param>
    /// <param name="container"></param>
    public static Point GetPosition(UIElement element, UIElement container)
    {
        if (element == null)
            throw new ArgumentNullException("element");
        if (container == null)
            throw new ArgumentNullException("container");
        var gt = element.TransformToVisual(container);
        var position = gt.Transform(new Point(0, 0));
        return position;
    }

Ура, Алекс

[EDIT] На самом деле, проверка «контейнера» на null не нужна - TransformToVisual также примет null в качестве параметра. Другая проблема: TransformToVisual создает исключение ArgumentException, например, когда «элемент» не виден, в данный момент отсутствует в визуальном дереве и т. д. и т. д. К сожалению, я не смог найти способ определить, будет ли TransformToVisual генерировать это исключение до фактического вызова его для «элемента». Поэтому я просто обернул вызовы TransformToVisual в блок try-catch и проглотил исключение ArgumentException, потому что оно, в любом случае, совершенно бесполезно.

...