【问题标题】:FindElementsInHostCoordinates Relative To Control Space Not Entire PageFindElementsInHostCoordinates 相对于控制空间不是整个页面
【发布时间】:2010-02-04 15:18:39
【问题描述】:

我正在使用 VisualTreeHelper 方法 FindElementsInHostCoordinates 在给定的 X 和 Y 位置查找 ListBoxItem。但是,X 和 Y 值似乎与整个页面中的点有关,而不仅仅是我感兴趣的 ListBox(即使我将该元素传递到该方法的子树参数中)。下面,this 指的是从 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 的左上角。我是否需要自己在这里做一些数学工作(在代码中)将页面坐标转换为 ListBox 坐标,或者是否有其他方法可以进行命中测试以判断给定的 X 和 Y 点是否在 ListBoxItem 上方?

谢谢。

【问题讨论】:

    标签: silverlight silverlight-3.0 visualtreehelper


    【解决方案1】:

    这是我自己想出来的(哇)。我确定了控件的顶部和左侧值,然后将 X 和 Y 值添加到控件内部:

    GeneralTransform gt = this.TransformToVisual(Application.Current.RootVisual as UIElement);
    Point offset = gt.Transform(new Point(0, 0));
    double controlTop = offset.Y + Y;
    double controlLeft = offset.X + X;
    

    所以,我可以传入相对于我的控件的 X 和 Y 值,但是这段代码会将其转换为全局坐标。

    对我有用,嘿!这个问题没有风滚草徽章。 :)

    【讨论】:

    • 你可能会考虑在你以后的问题中使用朴素的“silverlight”标签,它会吸引更多的眼球。
    • 感谢您的提示。在细节上另辟蹊径。 :)
    猜你喜欢
    • 2021-10-27
    • 2011-05-11
    • 1970-01-01
    • 2014-08-27
    • 2021-11-21
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多