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.