FindElementsInHostCoordinates 相对于控制空间而不是整个页面
我使用 VisualTreeHelper 方法 FindElementsInHostCooperatives 在给定的 X 和 Y 位置查找 ListBoxItem。但是,X 和 Y 值似乎与整个页面中的点相关,而不仅仅是我感兴趣的 ListBox(即使我将该元素传递到方法的子树参数中)。下面,这指的是从 ListBox 派生的自定义控件。
foreach (UIElement element in VisualTreeHelper.FindElementsInHostCoordinates(new Point(X, Y), this))
{
if (element is ListBoxItem)
{
int index = this.ItemContainerGenerator.IndexFromContainer(element);
break;
}
}
因此,(0,0) 将相对于整个插件的左上角而不是列表框的左上角。我是否需要自己在这里做一些数学工作(在代码中)将页面坐标转换为 ListBox 坐标,或者是否有其他方法进行命中测试来判断给定的 X 和 Y 点是否位于 ListBoxItem 上?
谢谢。
I'm using the VisualTreeHelper method FindElementsInHostCoordinates to find a ListBoxItem at the given X and Y location. However, X and Y value appear to be related to points in the entire page not just the ListBox I'm interested in (even though I'm passing in that element into the subtree parameter of the method). Below, this refers to a custom control which derives from ListBox.
foreach (UIElement element in VisualTreeHelper.FindElementsInHostCoordinates(new Point(X, Y), this))
{
if (element is ListBoxItem)
{
int index = this.ItemContainerGenerator.IndexFromContainer(element);
break;
}
}
So, (0,0) would be relative to the top left corner of the entire plug-in not the top left corner of the ListBox. Do I need to do some mathematical work here myself (in code) to transform the page coordinates to the ListBox coordinates or is there some other way to do a hit test to tell if a given X and Y point is over a ListBoxItem?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我自己解决了这个问题(哇)。我确定了控件的顶部和左侧值,然后将 X 和 Y 值添加到控件内部:
因此,我可以传入相对于控件的 X 和 Y 值,但此代码会将其转换为全局坐标。
对我有用,嘿!,这个问题没有风滚草徽章。 :)
I figured this out myself (wow). I determined the top and left values for my control and then added the X and Y values internal to my control:
So, I can pass in X and Y values relative to my control, but this code will transform it to global coordinates.
Works for me and hey!, no tumbleweed badge on this question. :)