Translating X,Y Coordinate

…衆ロ難τιáo~ 提交于 2019-12-11 06:16:39

问题


I currently have a user control that contains items that have a certain X, Y coordinate and there are limits to what those points must be within. In this case those positions are 0 > X > 40 and 0 > Y > 80 (40x80). The control I am hosting those items in is dynamic but has a certain aspect ratio based on window size. I need to translate those X & Y coordinates into relative locations within the user control. Any help is greatly apprecaited! Thanks in advance! If it matters/helps, I'm using Silverlight.


回答1:


you can use GeneralTransform to determine a UIElement's position relative to a container. Here's a snippet:

    /// <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;
    }

Cheers, Alex

[EDIT] In fact, checking "container" for null is unnecessary - TransformToVisual will also accept null as parameter. Another issue: TransformToVisual will throw an ArgumentException e.g. when "element" is not visible, is currently not in the visual tree etc. etc. Unfortunately, I could not find a way to determine whether TransformToVisual will throw that exception before actually calling it on "element". So I simply wrapped calls to TransformToVisual in a try-catch block and swallowed the ArgumentException, because it is quite useless anyway IMHO.



来源:https://stackoverflow.com/questions/3114322/translating-x-y-coordinate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!